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
但是

原因有两个:

  • true是布尔类型,其中1是整数
  • 简单地说,1不等于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