Javascript 需要对equals运算符(=)进行一些澄清
我对下面关于相等比较运算符Javascript 需要对equals运算符(=)进行一些澄清,javascript,Javascript,我对下面关于相等比较运算符== 如果两个操作数的类型不同,JavaScript将转换操作数,然后应用严格比较。如果任一操作数是数字或布尔值,则如果可能,将操作数转换为数字;否则,如果其中一个操作数是字符串,则如果可能,将另一个操作数转换为字符串。如果两个操作数都是对象,则JavaScript比较操作数引用内存中同一对象时相等的内部引用 但是警报(true==“true”)和警报(false==“false”)都返回false。为什么会这样 如果操作数是数字或布尔值,则如果可能,操作数将转换为数字
==
如果两个操作数的类型不同,JavaScript将转换操作数,然后应用严格比较。如果任一操作数是数字或布尔值,则如果可能,将操作数转换为数字;否则,如果其中一个操作数是字符串,则如果可能,将另一个操作数转换为字符串。如果两个操作数都是对象,则JavaScript比较操作数引用内存中同一对象时相等的内部引用
但是警报(true==“true”)
和警报(false==“false”)
都返回false。为什么会这样
如果操作数是数字或布尔值,则如果可能,操作数将转换为数字
在什么情况下JavaScript会将true和“true”转换为数字?上一个示例没有将它们转换为数字
在看这些例子时,我有更多的疑问:
'' == '0' // false
0 == '' // true
0 == '0' // true
false == 'false' // false
false == '0' // true
为假和'
为真,但为什么输出为假'0'
将被解释为false,0
也被解释为false。然后它变为真。我能理解这一点“
- 当
为假时,为什么0
解释为true'0'
- 为什么
被解释为false而false
被解释为true'0'
==
操作符是如何工作的吗
=== // strict check. Will compare value and type
== // will check only value not type
所以
==运算符将在执行任何必要的操作后进行相等性比较
类型转换。===运算符不会进行转换,因此如果
两个值的类型不同===只会返回false。它是
这种情况下,其中===将更快,并且可能返回不同的结果
比==。在所有其他情况下,性能将相同
请看一看。您想使用===而不是==
==检查值和类型是否相等
从文件中:
相等(=,!=)
如果两个表达式的类型不同,请尝试转换
将它们转换为字符串、数字或布尔值
NaN不等于任何东西,包括它自己
负零等于正零
null等于null和未定义
如果值在数字上是相同的字符串,则认为它们相等
等效数字、相同对象、相同布尔值,或(如果
不同类型)他们可以被强迫进入其中一种情况
其他每一项比较都被认为是不平等的
身份(==.!==)
这些运算符的行为与相等运算符相同,除了no
类型转换已完成,并且类型必须相同才能进行转换
被认为是平等的
为什么true==“true”和false==“false”是false
如果操作数是数字或布尔值,则转换操作数
如果可能的话,把数字改成数字
布尔值true可以转换为1
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”
您的所有其他查询都可以使用相同的推断来解决。
尝试根据规则显式转换参数,并在控制台中检查其值
例如:
console.log(TYPE(arg))//类型是字符串或数字
使用===
而不是=
来实现精确的相等=
将检查类型和值是否相等。true
转换为1,false
转换为0。如果我想得到正确的输出==我如何使用这个“”
为false,'0'
为true,但为什么输出为false?”这是什么问题?意思是有人问我这个问题。这就是我问这个的原因
console.log(Number("true")); // NaN . "True" cannot be converted to a number