第77天 请快速答出此题的答案并解释:var x, y = 1; x + y = ?
x // => undefined
y // => 1
x + y // => undefined + 1 => NaN
运算符 +
的implicit type conversion规则:
string
或 object 则两边转换为 string
进行连接number
并进行相加symbol
相加会 throw TypeError
@t532 题目出的有问题,修改了下,应该是 x + y
NaN
在 chrome 试了下,答案:NaN
var x, y=1 是赋值操作。x 没有给值仅给出了定义,那么 x = undefined,而 y=1
undefined+1 = NaN
@t532 第一条规则 >若任何一侧是 string 或 object 则两边转换为 string 进行连接
关于object不是准确的。
举例:
const obj = {
[Symbol.toPrimitive](hint) {
console.log('hint', hint)
}
};
'12' + obj; // 此时hint为default
12 + obj; // hint也为default
按照ES标准规则,hint为default则会依次调用valueOf和toString
所以不一定是两边转换为string进行连接
eg:
```` js
const obj = {
valueOf() {
return 12;
},
toString() {
return '21';
}
}
obj + 1; // 13
```
@maczyt 正解
我居然以为会报错,undefined居然还能加一
居然改题目了,害我昨天想好久,总觉得x=y=?这不是赋值操作吗,有啥答案
@xiangshuo1992 嘿嘿,我的错
NaN
变量x只是定义了并没有复制,此时为undefined
,so 等于 undefined+1
NaN
Most helpful comment
@t532 第一条规则 >若任何一侧是 string 或 object 则两边转换为 string 进行连接
关于object不是准确的。
举例:
按照ES标准规则,hint为default则会依次调用valueOf和toString
所以不一定是两边转换为string进行连接
eg:
```` js
const obj = {
valueOf() {
return 12;
},
toString() {
return '21';
}
}
obj + 1; // 13
```