我提出的问题是从this Code Academy lesson看到的。提前感谢您的解释。
希望这不会经常重复。
--------本课程的说明将在下面添加----------------
你可能已经注意到我们到目前为止使用了两种类型的等号,单个等于(=)和双等或三等于(==,===)。单个等于(=)分配一个变量,而double和triple等于(==,===)用于检查值之间的等价性。由于==在JavaScript中可能有一些奇怪的行为,因此使用===几乎总是更好。
运行此练习以查看其功能。它首先将变量字设置为字符串“this”。更改代码,使word ===“that”的计算结果为true,并运行console.log()命令。
答案 0 :(得分:6)
如果两个操作数的类型相同且值相同,则三等于===
将返回true。
如果两个操作数都可以强制转换为相同的类型(遵循一组特定的规则)并且在被强制后具有相同的值,则双等于==
将返回true。
所以,举个例子:
1 === 1 // true
1 === "1" // false
1 == 1 // true
1 == "1" // true
"5" == 2 + 3 // true
0 == "" // true
0 === "" // false
null == undefined // true
null === undefined // false
答案 1 :(得分:4)
我知道===
具有“奇怪行为”的唯一情况是将 native-value (例如string
)与对象值进行比较(例如String
)“可转换为”原生值:
"a" === "a" // true
"a" == new String("a") // true
"a" === new String("a") // false- uh, what?
new String("a") == new String("a") // false- thought it was gonna be true? :)
new String("a") === new String("a") // false
var a = new String("a"); a === a // true
其他包装类型也是如此,例如Number
。这是因为,在使用===
时,JavaScript使用不执行强制的不同算法。
过去有一些有趣的浏览器错误,某些方法(例如String.prototype
)会返回String
而不是string
会导致代码以微妙的方式中断。< / p>
正如其他人所指出的,==
的行为往往更有趣。我几乎完全发现==
做了正确的事情,但了解细节对掌握JavaScript非常重要。
快乐的编码。
答案 2 :(得分:3)
如果两个变量包含相同的值但类型不同,则==“强制”相等并返回true。但是,===将返回false,因为它要求两个变量具有相同的值和具有相同的tye才能相等。否则,他们表现得很相似。
答案 3 :(得分:3)
==
检查值是否相等。 ===
检查值是否相同。
为了说明这个例子,请看一下:
"1" == 1 // this is TRUE, because the values are equivalent.
"1" === 1 // this is FALSE, because the values are of different types.
我还没有在JavaScript中遇到需要===
的情况,因为它是该语言的一个相对较新的添加项,因此例如indexOf
返回一个负数表示“不匹配” (而PHP返回false
,因此您必须使用===
来区分“不匹配”和“字符串开头匹配”。
答案 4 :(得分:2)
我会高度建议您通过Bucky Schwarz观看此演示文稿:
在最初的5分钟内,他谈到了这个话题。
取自他的一张幻灯片:
'' == '0' // false
0 == '' // true
0 == '0' // true
false == 'false' // false
false == '0' // true
false == 0 // true
false == undefined // false
false == null // false
null == undefined // true