Javascript 为什么1===1===1为假?
在浏览器控制台中,输入Javascript 为什么1===1===1为假?,javascript,operators,boolean-logic,Javascript,Operators,Boolean Logic,在浏览器控制台中,输入1===1计算结果为true。输入1===1===1计算结果为false 我假设这是因为语句的计算方式: 1==1==1 变成 (1==1)==1 评估结果是 true==1 这是false 这是正确的吗?如果不是,这种行为的真正原因是什么?是的,你完全正确。这里有两个相等检查,它们具有相同的运算符优先级。第一个先求值,然后其结果应用于下一个相等性检查 1===1===1与(1==1)===1相同,后者是true===1,后者是false,因为这里您通过值及其类型进行检查1
1===1
计算结果为true
。输入1===1===1
计算结果为false
我假设这是因为语句的计算方式:
1==1==1
变成
(1==1)==1
评估结果是
true==1
这是false
这是正确的吗?如果不是,这种行为的真正原因是什么?是的,你完全正确。这里有两个相等检查,它们具有相同的运算符优先级。第一个先求值,然后其结果应用于下一个相等性检查
1===1===1
与(1==1)===1
相同,后者是true===1
,后者是false
,因为这里您通过值及其类型进行检查1==1==1
将导致true
,因为它只检查值的相等性,所以1==1==1
等于(1==1)==1
等于true
运算符不仅测试相等性,还测试类型相等性。由于整数不是布尔值,true==1
为false
比较:
true==1;//真的
真===1;//假的
.你提到的行为是正确的 这是因为
==
意味着基于类型和值的匹配。
true==1
在类型上不匹配,但true==1
基于值进行匹配。正确的行为。自
1===1 // value is true
但是
原因有两个:
如果1==1==1,那么它将是真的实际上操作是从左到右解析的。因此
1===1==1
被评估为(1==1)==1
,而不是1==(1==1)
。在这种情况下,显然没有任何区别。谢谢-我更新了答案以反映这一点:)谢谢所有信息丰富的答案。我怀疑这就是原因,但得到一些确认是很好的。它是true===1
,因为等式运算符是左关联的true===1===1//false
而1===true//true
@Tibos:Correct,尽管这不会改变答案的要点true==1
仍然是真的,而true===1
仍然是假的。是的,答案的内容完全准确,但就问题而言,它是误导性的。谢谢你的编辑!它是true===1
,因为相等运算符是左关联的。对不起,我的错。我知道它的左关联:)你可以编辑你的答案来改进它(或者删除,如果你认为你不能为未来潜在的读者增加价值的话)。第2点)取决于浏览器的实现。例如,在C语言中,没有“Boolean”,而是使用int,0为false,其他任何值为true,因此1实际上等于“true”。因此1==true
。tl;dr 1和true之间的唯一区别是某些实现中的类型。@11684-它不依赖于浏览器实现。它取决于规范的正确实现。这是JavaScript,而不是C,并且布尔值
不是数字(即使根据规范,如果使用=
运算符而不是=
,则可能存在类型强制).在C中,没有布尔类型,通常使用整数,因为0会自动计算为false,而任何其他int值都会计算为true。JavaScript主要是解释的,因此这种比较将由浏览器本机执行。==将更改arg类型,==将不正确写入?
true===1 // it's false
1===1===1 // false