首页 > 试题广场 >

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

[单选题]
"+new Array(017)" 这段代码输出为?()
  • 17
  • NaN
  • 15
  • Error

首先,前面+是一元运算符,相当于我们说的正负,无运算效果,但是可以将字符串等转为number类型。  
 此题中017其实是八进制,故而是是Array(15)。  
这里相当于对于一个未赋值但是长度为15的数组进行number类型转化,其结果为NaN
发表于 2022-01-11 18:09:10 回复(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以上都是NaN //NaN console.log(+[]); //0 console.log(+[1]); //1 console.log(+[1, 2]); //NaN console.log(+[undefined]); //0 console.log(+[undefined, undefined]); //NaN
发表于 2017-01-17 11:40:36 回复(5)
这题真没意思,多见见吧

稀里糊涂的表达式

表达式 结果 原因
undefined == null
NaN == NaN 两个NaN永远不会相等
isNaN("100") (发生转换)"100"=>100=>假
isNaN(null) (发生转换)null=>0=>假
parseInt("1a") === 1 (发生转换)"1a"=>1=>真
[] instanceof Array
typeot []或 unll Object 基本数据类型我行,引用数据类型我摆烂,都是obj
+new Array(017) NaN
alert(2<1<3) true 2<1会显示false,而false在js中会被转换为0,后面等于0<3,于是true

编辑于 2022-03-06 16:25:03 回复(2)
一元运算符+ 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为非基础类型,报错
发表于 2021-12-29 12:56:41 回复(1)
+作为一元运算符时,会将参数转换为数字返回。而new Array(017)得到的是一个长度为15的空数组。
发表于 2017-08-03 10:11:19 回复(0)
+new Array(017)
这里的+运算符的作用是把后面的这个值转化成number
但是 array又没法直接转化成number
所以结果是NaN

发表于 2022-01-21 08:08:32 回复(0)
017是8进制
发表于 2021-12-28 09:52:12 回复(0)
本题考验了:
  1. 运算符优先级

  2. 进制转换
  3. 在对象上使用一元加运算符

  4. Array构造函数的用法

  • 首先根据运算符的优先级 new 优先级18  > + 优先级 15 所以先执行 new Array(017)
  • new Array(017) 因为传入的是数字,但是数字是8进制所以转换为10进制 017 => 15
  • +将 new Array(15) 转换为数字  先调用 valueOf 由于Array 没有自己的valueOf 方法 所以使用Object.prototype.valueOf 方法 返回 数组本身 [empty × 15] 因为不是原始类型 所以继续调用 toString 转换为 ',,,,,,,,,,,,,,'
  • 最后将字符串转换为数字 返回 NaN
  • new Array(017); // [empty × 15]
    new Array(017).valueOf().toString(); // ',,,,,,,,,,,,,,'
    +'...............'; // NaN



编辑于 2022-11-27 16:50:56 回复(0)
1.八进制转十进制:017—15 2.通过构造函数创建数组new Array(017)得到一个长度为15的数组 3.+ newArray(017)将数组转换为number数值,首先调用数组的valueof方法得到数组对象自己数值转换得NaN,进而再调用toString方法得字符串“,,,,,,,,,,,,,,”,该字符串转换为数值得到NaN。
发表于 2022-06-22 15:52:51 回复(0)
console.log(+new Array(017)) // NaN
console.log(+[017])   // 15   八进制
console.log(+017)   // 15
console.log(017)   // 15

console.log('*********************');

console.log(+new Array())  // 0
console.log(+new Array(0)) // 0
console.log(+new Array(1)) // 0
console.log(+new Array(2)) // NaN

console.log('*********************');

console.log(+[])      // 0
console.log(+[1])     // 1
console.log(+[2])     // 2
console.log(+[017])   // 15
console.log(+[1, 2])  // NaN

console.log('*********************');

console.log(+[null]) // 0
console.log(+[undefined]) // 0
console.log(+[undefined, undefined])  // NaN

编辑于 2022-08-24 10:27:52 回复(0)
输出结果:

编辑于 2024-04-06 11:07:43 回复(0)
有跟我一样,把双引号也算进代码里面去的吗?
发表于 2022-11-17 22:26:11 回复(0)
这题有病吧,为啥要加双引号
发表于 2022-11-08 14:17:46 回复(0)
一个十五个元素的数组,引用类型转换为number类型,调用tostring方法,得到一串逗号,number在转换时遇到非有效字符,NaN
发表于 2022-10-19 16:04:25 回复(0)
转化顺序:
console.log((new Array(017)).valueOf());//(15) []
console.log((new Array(017)).toString());//,,,,,,,,,,,,,,,,

发表于 2022-10-09 21:01:30 回复(0)

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));     //NaN
console.log(+[1]);          //1
console.log(+[1, 2]);         //NaN
console.log(+[]);          //0
console.log(+[undefined]);      //0
console.log(+undefined);       //NaN


发表于 2022-03-15 15:17:52 回复(0)