首先,前面+是一元运算符,相当于我们说的正负,无运算效果,但是可以将字符串等转为number类型。
此题中017其实是八进制,故而是是Array(15)。
这里相当于对于一个未赋值但是长度为15的数组进行number类型转化,其结果为NaN
八进制的17转为二进制:001111,再转为十进制的15(8+4+2+1)
+运算符作为二元运算符时,有两个功能 数字相加连接字符串 数字相加没啥好说的,连接字符串时,会先把两个参数都转换成字符串再进行连接。
+作为一元运算符时,会将参数转换为数字返回 结果 所以console.log(+new Array(017));输出的是NaN
其他类似的还有-运算符,输出一个转换后的负数
附上一些其他的输出
console.log(+new Array()); //0
console.log(+new Array(0)); //0
console.log(+new Array(1)); //0
console.log(+new Array(2)); //2
2以上都是NaN //NaN
console.log(+[]); //0
console.log(+[1]); //1
console.log(+[1, 2]); //NaN
console.log(+[undefined]); //0
console.log(+[undefined, undefined]); //NaN
一元运算符+
1.+number => 结果为十进制的number
2.+string => 数字样式的字符串 会转换为字符串 否则为NaN
3.+Symbol => 报错
4.+boolean => true:1;false:0
5.+null => 0
6.+undefined => NaN
7.+object 的话会复杂一些,调用valueOf方法得到返回值v,如果v为基础数据类型,结果即为+v,非基础数据类型的话会调用对象的toString方法,得到返回值s,s为基础类型,结果为+s,如果s为非基础类型,报错
Araay的valueOf先调用,得到非基础类型,在调用toString得到字符串,应用+操作符得到NaN
稀里糊涂的表达式
表达式 结果 原因
undefined == null 真
NaN == NaN 假 两个NaN永远不会相等
isNaN("100") 假 (发生转换)"100"=>100=>假
isNaN(null) 假 (发生转换)null=>0=>假
parseInt("1a") === 1 真 (发生转换)"1a"=>1=>真
[] instanceof Array 真
typeot []或 null Object 基本数据类型我行,引用数据类型我摆烂,都是obj
+new Array(017) NaN
alert(2<1<3) true 2<1会显示false,而false在js中会被转换为0,后面等于0<3,于是true
标签:.+,console,log,NaN,017,new,Array
From: https://www.cnblogs.com/longmo666/p/17824077.html