javascript中是否存在与0相关的特殊相等条件?

javascript中是否存在与0相关的特殊相等条件?,javascript,equality,Javascript,Equality,我有两个代码示例,我不明白为什么它们会以这种方式进行计算 示例一(这些评估结果为真): 但这将计算为NaN,而不是0: ({} + []) / ({} + 1) 示例2(您可以链接第一个): 但这将评估为false,即使选择任意两个将评估为true 0 == "0" == 0/1 0 == "0" == 0/1 使用==运算符时,允许强制。这使得值要么是“truthy”,要么是“falsy”,这取决于所涉及的操作数。用===运算符试试看会发生什么。您得到了第一个示例的解释

我有两个代码示例,我不明白为什么它们会以这种方式进行计算

示例一(这些评估结果为真):

但这将计算为NaN,而不是0:

    ({} + []) / ({} + 1)

示例2(您可以链接第一个):

但这将评估为false,即使选择任意两个将评估为true

    0 == "0" == 0/1
0 == "0" == 0/1

使用==运算符时,允许强制。这使得值要么是“truthy”,要么是“falsy”,这取决于所涉及的操作数。用===运算符试试看会发生什么。

您得到了第一个示例的解释,下面是第二个示例:

1 == "1" == 1/1 -> true
解释:
1==“1”->true
,然后
true==1/1
计算为
1==1
,即
true

0 == "0" == 0/1
解释:
0==“0”->true
,然后
true==0/1
计算为
1==0
,即
false

这就是为什么我的示例
0==1==0
在注释中的计算结果为
true

0==1->false
false==0->true

0 == "0" == 0/1
示例一(这些评估结果为真):

请理解您的表达和以下内容:

 ({} + []) == 0
 ({} + 1) == 1
考虑到括号中的表达式的计算结果分别为
“[object object]”
(和
“[object object]1”
),很明显,为什么除法会产生
NaN


样本二是另一回事

javascript中是否存在与0相关的特殊相等条件

0
是唯一的falsy数字,在使用布尔值时会产生不同(其中
false
将转换为
0

检查此项的评估:

(1 == "1") == 1/1 // casting the string to a number
(1 == 1) == 1
true == 1 // casting the boolean to a number
1 == 1
true
由于
1/1
1
且等式是可交换的,因此
1==(“1”==1/1)

但这将评估为false,即使选择任意两个将评估为true

    0 == "0" == 0/1
0 == "0" == 0/1
没有“但是”:

同样,我们是做
(0==“0)==0
还是做
0==“0”==0

即使没有类型转换,在纯布尔逻辑中也很清楚

(true == true) == true
结果将不同于

(false == false) == false

JavaScript不支持链式比较运算符,这些操作将隐式嵌套。如果需要测试三个值是否相等,请执行
(false==false)&(false==false)

相关操作请使用“==”而不是“==”尝试第一个集,然后读取差异。另一个用于练习:
0==1==0
{}+[]
被解释为
+[]
{}
是一个“块”,而不是一个对象。
[]
首先转换为一个字符串(
'
),然后转换为一个数字(
0
)。它不是做加法,而是一元
+
运算符。与
{}+1
相同。
{
是括号,就像在
({}+[])
中一样,然后它被视为一个对象,变成字符串连接(
'[object object]'++'
)。请尝试
0=={}+[]
1=={}+1
相反,当我在我的评论中按enter键时,我看到您的答案突然出现:P很好。对示例1使用
==
实际上不会有什么区别。这可能是真的,但我试图弄清楚为什么有人会将空对象或空数组与1进行比较。即使是在松散类型的语言中,程序员也必须显示一些规则——事实上,我要说的是,特别是在一种松散类型的语言中。
(true == true) == true
(false == false) == false