([]).length --> 空数组的length是0
({}).length --> {}是一个空对象,这个对象是没有length 方法的所以是undefined
([] + {}).length --> 实际这两个是不能用操作符"+"的,这个表达式实际是分别调用了[]和{}的toString()方法。[]返回空字符串"",而{}返回"[object Object]",这两个字符串拼在一起刚好是15个字符的一个字符串。
({} + {}).length
等价于({}.toString() + {}.toString()).length
({}).length
结果为undefined,这是因为对象{}没有length属性,所以是undefinedtoString()
方法,其结果是字符串的相加,于是{}.toString()
的值为[object Object]
[object Object]
,为15,如下所示:
1
2
|
[ o b j e c t O b j e c t ]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
({} + {}).length
->> ({}.toString() + {}.toString()).length
{}.toString()
->> [object Object]
所以,({} + {}).length
= ({}.toString() + {}.toString()).length
= [object Object]
+[object Object]
= 15+15 = 30
["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(string, radix);
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)
原文:https://www.cnblogs.com/ndh074512/p/15074394.html