同样适用于'1\t'
(可能还有其他人)。
if (1 == '1\n') {
console.log('Equal');
}
else {
console.log('Not Equal');
}
答案 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/)