[js] 第77天 请快速答出此题的答案并解释:var x, y = 1; x + y = ?
haizhilin2013 opened this issue · 15 comments
haizhilin2013 commented
第77天 请快速答出此题的答案并解释:var x, y = 1; x + y = ?
Deleted user commented
x // => undefined
y // => 1
x + y // => undefined + 1 => NaN
运算符 +
的implicit type conversion规则:
- 若任何一侧是
string
或 object 则两边转换为string
进行连接 - 否则均转换为
number
并进行相加 - 注意
symbol
相加会 throwTypeError
haizhilin2013 commented
@t532 题目出的有问题,修改了下,应该是 x + y
uuuutiger commented
NaN
Konata9 commented
在 chrome 试了下,答案:NaN
var x, y=1 是赋值操作。x 没有给值仅给出了定义,那么 x = undefined,而 y=1
undefined+1 = NaN
maczyt commented
@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:
const obj = {
valueOf() {
return 12;
},
toString() {
return '21';
}
}
obj + 1; // 13
```
yxkhaha commented
- NaN
- 原因:x只是声明了并未赋值,默认值为undefined, x+y ==> undefined + 1 = NaN
lookguy commented
我居然以为会报错,undefined居然还能加一
xiangshuo1992 commented
居然改题目了,害我昨天想好久,总觉得x=y=?这不是赋值操作吗,有啥答案
haizhilin2013 commented
@xiangshuo1992 嘿嘿,我的错
poporeki commented
NaN
变量x只是定义了并没有复制,此时为undefined
,so 等于 undefined+1
Alex-Li2018 commented
NaN
MrZ2019 commented
x // => undefined y // => 1 x + y // => undefined + 1 => NaN运算符
+
的implicit type conversion规则:
- 若任何一侧是
string
或 object 则两边转换为string
进行连接- 否则均转换为
number
并进行相加- 注意
symbol
相加会 throwTypeError
1684838553 commented
var x, y = 1; x + y = ?
x == undefined
y == 1
undefined 转成number类型为NaN
NaN + 1 == NaN
xiaoqiangz commented
NaN