Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么===在Javascript中会有一些奇怪的行为?_Javascript - Fatal编程技术网

为什么===在Javascript中会有一些奇怪的行为?

为什么===在Javascript中会有一些奇怪的行为?,javascript,Javascript,我提出的问题是从我的角度来看的。提前感谢您的解释 希望不要重复太多 --------下面添加了本课的解释---------------- 您可能已经注意到,到目前为止,我们使用了两种类型的等号,单等号(=)和双等号或三等号(=,==)。单等号(=)指定一个变量,而双等号和三等号(==,===)用于检查值之间的等效性。因为==在JavaScript中可能有一些奇怪的行为,所以使用==几乎总是更好的 运行此练习以查看它的作用。它首先将变量字设置为字符串“this”。更改代码,使word==“that

我提出的问题是从我的角度来看的。提前感谢您的解释

希望不要重复太多

--------下面添加了本课的解释----------------

您可能已经注意到,到目前为止,我们使用了两种类型的等号,单等号(=)和双等号或三等号(=,==)。单等号(=)指定一个变量,而双等号和三等号(==,===)用于检查值之间的等效性。因为==在JavaScript中可能有一些奇怪的行为,所以使用==几乎总是更好的

运行此练习以查看它的作用。它首先将变量字设置为字符串“this”。更改代码,使word==“that”的计算结果为true,并运行console.log()命令


如果两个变量包含相同的值但类型不同,==“强制”相等并返回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

我强烈建议您通过以下方式观看本演示文稿:

在最初的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

我强烈建议您通过以下方式观看本演示文稿:

在最初的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

据我所知,
=
具有“奇数行为”的唯一情况是将本机值(例如
字符串
)与“可转换为”本机值的对象值(例如
字符串
)进行比较:

"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按钮,你提供的链接只会生成一个新的链接“哦,再试一次”