为什么在Javascript中1 =='1 \ n'为真?

时间:2016-04-14 10:05:46

标签: javascript equals equality

同样适用于'1\t'(可能还有其他人)。

if (1 == '1\n') {
  console.log('Equal');
}
else {
  console.log('Not Equal');
}

2 个答案:

答案 0 :(得分:2)

  

equality operator(==) 转换操作数(如果它们的类型不同),然后应用严格比较。如果两个操作数都是对象,则JavaScript比较内部引用,当操作数引用内存中的同一对象时,这些内部引用相等。

1属于Number类型,因此'1\n'首先转换为Number,然后comparison发生!

Number()构造函数会将字符串('1\n')转换为1: -

Number('1\n') === 1

Strict equality using ===中,在比较之前,这两个值都不会隐式转换为其他值。如果值具有不同的类型,则认为这些值不相等。

因此1 === '1\n'将表示为false

答案 1 :(得分:2)

如前所述,如果你比较number == string,它会自动尝试将字符串转换为数字。 \n\t只是空白字符,因此会被忽略。

这种和类似的行为可能相当混乱,导致这样的情况:

(图片来自:https://www.reddit.com/r/ProgrammerHumor/comments/3imr8q/javascript/