zoukankan      html  css  js  c++  java
  • 关于对象Object的面试题

    ([] + {}).length的结果是多少 --->  15    

    ([]).length --> 空数组的length是0

    ({}).length --> {}是一个空对象,这个对象是没有length 方法的所以是undefined

    ([] + {}).length --> 实际这两个是不能用操作符"+"的,这个表达式实际是分别调用了[]和{}的toString()方法。[]返回空字符串"",而{}返回"[object Object]",这两个字符串拼在一起刚好是15个字符的一个字符串。

    ({} + {}).length---->   30

    • 1、({} + {}).length等价于({}.toString() + {}.toString()).length
    • 2、({}).length结果为undefined,这是因为对象{}没有length属性,所以是undefined
    • 3、由于javascript是弱类型语言,加法运算间接调用了对象的toString()方法,其结果是字符串的相加,于是{}.toString()的值为[object Object]
    • 4、码笔记来数一下[object Object],为15,如下所示:
    • 5、所以,最终15+15=30

    懂了吗?码笔记梳理一下:

    • ({} + {}).length ->> ({}.toString() + {}.toString()).length
    • {}.toString() ->> [object Object]

    所以,({} + {}).length = ({}.toString() + {}.toString()).length = [object Object]+[object Object] = 15+15 = 30

    (function(){}).length   ------>0   

    (function(a,b,c){}).length------>3  

     
    函数的 length 属性只能得到他的形参个数
     
     
     

    ["1", "2", "3"].map(parseInt)得到什么?

    答案是:[1, NaN, NaN].

    原因:主要是下面这3点 

    var arr = ["1","2","3"];
    arr.map((value,index,array)=>parseInt(value,index));//parseInt(string,radix)
     

    parseInt(stringradix);

    string: 需要转化的字符,如果不是字符串会被转换,忽视空格符。

    radix:数字2-36之前的整型。默认使用10,表示十进制。这个参数的意义是指把前面的字符看作是多少进制的数字,所谓的基数。

    parseInt('1', 0); // 1 (parseInt的处理方式,这个地方item没有以"0x"或者"0X"开始,8和10这个基数由实现环境来定,ES5规定使用10来作为基数,因此这个0相当于传递了10)
    parseInt('2', 1); // NaN (因为parseInt的定义,超出了radix的界限)
    parseInt('3', 2); // NaN (虽然没有超出界限,但是二进制里面没有3,因此返回NaN)
  • 相关阅读:
    活着的目标
    Online Judge(OJ)搭建——2、数据库,SQL语句
    《Docker 实战》第三章 Docker Hub 寻宝游戏
    2017年计划
    IDEA 问题 & 解决
    IDEA 自动化配置
    bzoj 3796: Mushroom追妹纸【二分+后缀数组+st表】
    CF487E Tourists【圆方树+tarjan+multiset+树剖+线段树】
    bzoj 1023: [SHOI2008]cactus仙人掌图【tarjan+dp+单调队列】
    bzoj 4316: 小C的独立集【仙人掌dp】
  • 原文地址:https://www.cnblogs.com/ndh074512/p/15074394.html
Copyright © 2011-2022 走看看