【发布时间】:2016-04-14 10:05:45
【问题描述】:
'1\t'(可能还有其他人)也是如此。
if (1 == '1\n') {
console.log('Equal');
}
else {
console.log('Not Equal');
}
【问题讨论】:
-
因为
Number('1\n')是1,如果您想要严格比较,请使用===。
标签: javascript equals equality
'1\t'(可能还有其他人)也是如此。
if (1 == '1\n') {
console.log('Equal');
}
else {
console.log('Not Equal');
}
【问题讨论】:
Number('1\n') 是1,如果您想要严格比较,请使用===。
标签: javascript equals equality
如前所述,如果您比较number == string,它会自动尝试将字符串转换为数字。 \n 和 \t 只是空白字符,因此被忽略。
这种和类似的行为可能会让人很困惑,从而导致如下情况:
(图片取自:https://www.reddit.com/r/ProgrammerHumor/comments/3imr8q/javascript/)
【讨论】:
equality operator(
==) 如果操作数不属于同一类型,则转换它们,然后应用严格比较。如果两个操作数都是对象,那么当操作数引用内存中的同一个对象时,JavaScript 会比较相等的内部引用。
1 是Number 类型,因此'1\n' 首先转换为Number,然后comparison 发生!
而Number() 构造函数会将字符串('1\n') 转换为1 :-
Number('1\n') === 1在Strict equality using === 中,两个值在比较之前都不会隐式转换为其他值。如果值具有不同的类型,则认为这些值不相等。
因此1 === '1\n' 将表示为false
【讨论】: