haizlin/fe-interview

[js] 第77天 请快速答出此题的答案并解释:var x, y = 1; x + y = ?

Opened this issue · 15 comments

第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:

const obj = {
valueOf() {
  return 12;
},
toString() {
  return '21';
}
}

obj + 1; // 13
```

@maczyt 正解

  • NaN
  • 原因:x只是声明了并未赋值,默认值为undefined, x+y ==> undefined + 1 = NaN

我居然以为会报错,undefined居然还能加一

居然改题目了,害我昨天想好久,总觉得x=y=?这不是赋值操作吗,有啥答案

@xiangshuo1992 嘿嘿,我的错

NaN
变量x只是定义了并没有复制,此时为undefined,so 等于 undefined+1

x // => undefined
y // => 1
x + y // => undefined + 1 => NaN

运算符 + 的implicit type conversion规则:

  • 若任何一侧是 string 或 object 则两边转换为 string 进行连接
  • 否则均转换为 number 并进行相加
  • 注意symbol 相加会 throw TypeError

var x, y = 1; x + y = ?
x == undefined
y == 1
undefined 转成number类型为NaN
NaN + 1 == NaN

NaN