"+new Array(017)" 这段代码输出为 NaN

发布时间 2023-11-10 14:46:58作者: 龙陌

首先,前面+是一元运算符,相当于我们说的正负,无运算效果,但是可以将字符串等转为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