我对下面关于等于比较运算符==
如果两个操作数的类型不同,JavaScript会转换操作数,然后应用严格比较。如果操作数是数字或布尔值,操作数将尽可能转换为数字;否则,如果任一操作数是字符串,则另一个操作数将转换为字符串(如果可能)。如果两个操作数都是对象,则JavaScript比较内部引用,当操作数引用内存中的同一对象时,这些内部引用相等。
但alert(true == "true")
和alert(false == "false")
都会返回 false 。为什么会这样?
如果任一操作数是数字或布尔值,则操作数将转换为数字(如果可能)
JavaScript在什么情况下将true和“true”转换为数字?前面的示例不会将它们转换为数字。
在查看这些示例时,我有更多疑问:
'' == '0' // false
0 == '' // true
0 == '0' // true
false == 'false' // false
false == '0' // true
''
false 且'0'
true ,但为什么输出为 false ?0
将被解释为 false ,而''
也会被解释为 false 。然后它变为 true 。我能理解这一点。'0'
false 时,为什么0
被解释为 true ?false
被解释为 false 而'0'
被解释为 true ?有人可以更详细地解释==
运算符的工作原理吗?
答案 0 :(得分:4)
=== // strict check. Will compare value and type
== // will check only value not type
所以,
0 == '' // true
0 === '' // false
在执行任何必要操作后,==运算符将比较相等性 类型转换。 ===运算符不会进行转换,所以如果 两个值不是同一类型===只会返回false。它' S 这种情况下===会更快,并可能返回不同的结果 比==。在所有其他情况下,表现将是相同的。
Does it matter which equals operator (== vs ===) I use in JavaScript comparisons?
答案 1 :(得分:2)
为什么是真的=="是真的"和假=="假"是假的?
如果操作数是数字或布尔值,则转换操作数 尽可能的数字
布尔值true可以转换为一个。
console.log(Number(true)); // 1
让我们转换第二个参数
console.log(Number("true")); // NaN . "True" cannot be converted to a number
所以这评估为1==NaN
// false。 NaN很疯狂,因为它甚至不等于NaN == NaN
false =="false"
您可以使用相同的扣除来解决所有其他查询。 尝试使用expliclity根据规则转换你的参数,并在控制台中检查它的值。
例如。)console.log(TYPE(arg)) // Type is either String or Number
答案 2 :(得分:1)
看看javascript documentation。您想使用===而不是==
===检查值和类型相等。
来自文档:
平等(==,!=)
如果两个表达式的类型不同,请尝试转换 它们是字符串,数字或布尔值。
NaN不等于包括其自身在内的任何东西。
负零等于正零。
null等于null和undefined。
如果值是相同的字符串,则数值被认为是相等的 等价数字,相同对象,相同布尔值或(如果 不同的类型)他们可以被胁迫进入其中一种情况。
其他所有比较都被视为不平等。
身份(===。!==)
这些运算符的行为与除了no之外的相等运算符相同 完成类型转换,类型必须相同 被认为是平等的。