【问题标题】:Why is 1 == '1\n' true in Javascript?为什么 1 == '1\n' 在 Javascript 中为真?
【发布时间】:2016-04-14 10:05:45
【问题描述】:

'1\t'(可能还有其他人)也是如此。

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

【问题讨论】:

标签: javascript equals equality


【解决方案1】:

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

这种和类似的行为可能会让人很困惑,从而导致如下情况:

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

【讨论】:

  • 我知道 == 和 === 之间的区别。然而,我不知道的是,在 == 的转换过程中会忽略空格。
【解决方案2】:

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多