为什么===在Javascript中会有一些奇怪的行为?
我提出的问题是从我的角度来看的。提前感谢您的解释 希望不要重复太多 --------下面添加了本课的解释---------------- 您可能已经注意到,到目前为止,我们使用了两种类型的等号,单等号(=)和双等号或三等号(=,==)。单等号(=)指定一个变量,而双等号和三等号(==,===)用于检查值之间的等效性。因为==在JavaScript中可能有一些奇怪的行为,所以使用==几乎总是更好的 运行此练习以查看它的作用。它首先将变量字设置为字符串“this”。更改代码,使word==“that”的计算结果为true,并运行console.log()命令为什么===在Javascript中会有一些奇怪的行为?,javascript,Javascript,我提出的问题是从我的角度来看的。提前感谢您的解释 希望不要重复太多 --------下面添加了本课的解释---------------- 您可能已经注意到,到目前为止,我们使用了两种类型的等号,单等号(=)和双等号或三等号(=,==)。单等号(=)指定一个变量,而双等号和三等号(==,===)用于检查值之间的等效性。因为==在JavaScript中可能有一些奇怪的行为,所以使用==几乎总是更好的 运行此练习以查看它的作用。它首先将变量字设置为字符串“this”。更改代码,使word==“that
如果两个变量包含相同的值但类型不同,==“强制”相等并返回true。但是,===将返回false,因为它要求两个变量具有相同的值并且具有相同的类型才能相等。否则,它们的行为相似。如果两个变量包含相同的值但类型不同,==“强制”相等并返回true。但是,===将返回false,因为它要求两个变量具有相同的值并且具有相同的类型才能相等。否则,它们的行为相似。
==
检查值是否相等<代码>=检查值是否相同
为了说明此示例,请看以下内容:
"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
,因此您必须使用=
来区分“不匹配”和“不匹配”“字符串开头匹配”)。=
检查值是否相等。==
检查值是否相同
为了说明此示例,请看以下内容:
"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
,因此您必须使用=
来区分“不匹配”和“不匹配”如果两个操作数的类型相同且值相同,则三重等于将返回true
如果两个操作数都可以强制为同一类型(遵循特定的规则集),并且在强制后具有相同的值,则double equals==
返回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
如果两个操作数类型相同且值相同,则三重等于
==
将返回true
如果两个操作数都可以强制为同一类型(遵循特定的规则集),并且在强制后具有相同的值,则double equals==
返回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
我强烈建议您通过以下方式观看本演示文稿:
'' == '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
我强烈建议您通过以下方式观看本演示文稿:
'' == '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
据我所知,
=
具有“奇数行为”的唯一情况是将本机值(例如字符串
)与“可转换为”本机值的对象值(例如字符串
)进行比较:
"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
中,某些方法会返回字符串而不是字符串,从而导致代码以微妙的方式中断
正如其他人所指出的,==
的行为通常更……有趣。我几乎完全发现==
做了正确的事情™ , 但是理解细节对于掌握JavaScript很重要
愉快的编码。我所知道的===
具有“奇怪行为”的唯一情况是将本机值(例如字符串
)与“可转换为”本机值的对象值(例如字符串
)进行比较:
"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
中,某些方法会返回字符串而不是字符串,从而导致代码以微妙的方式中断
正如其他人所指出的,==
的行为通常更……有趣。我几乎完全发现==
做了正确的事情™ , 但是理解细节对于掌握JavaScript很重要
愉快的编码。你愿意在这里发布这个问题吗?@SergioTulentsev:我认为这个问题在标题中很明显。点击run按钮,你提供的链接只会生成一条“Oops,重试”消息。非常确定一点研究会对你有所帮助。“Oops,重试”“只是他们页面中的某种bug。它与==
或===
的技术行为无关。我想你的意思是==
可能会有奇怪的行为,而不是==
。你愿意把这个问题贴在这里吗?@SergioTulentsev:我认为这个问题在标题中很明显。点击run按钮,你提供的链接只会生成一个新的链接“哦,再试一次”