在JS if(condition)表示== true或=== true

ama*_*aes 3 javascript css

我知道它之间的区别==,===但是我始终认为if (condition) condition应该true使用严格的等式(===)而不是类型强制的相等(==)进行评估.

看一个例子:

if (1) {
    console.log("1");
}

if (1 == true) {
    console.log("2");
}

if (1 === true) {
    console.log("3");
}
Run Code Online (Sandbox Code Playgroud)

它返回:

::1
::2
Run Code Online (Sandbox Code Playgroud)

我知道1并不严格等于true,因为类型不同,但是当我if (condition)根据W3C 做它应该是严格的相等test(===)运行而不是类型强制相等==.

那为什么要记录1?

Ser*_*ite 9

if语句使用condition == true.它在ECMAScript语言规范中给出,这里:http://www.ecma-international.org/ecma-262/5.1/#sec-12.5

请注意ToBoolean()步骤2中的用法.这将给定参数转换为布尔值,这意味着是,类型强制确实发生在if语句的条件中.

  • @Glauco:什么书指出_根据W3C_的默认行为是`===`?请告诉我,所以我可以将它永久列入黑名单,举行仪式燃烧,万一我统治世界;) (6认同)
  • 我只是对此发表评论,StackOverflow上的人不会正确地阅读这个问题,并且在没有理解的情况下如此快速地投票...如果你不理解这个问题就是你的问题,再读一遍或发表评论而不是贬低.这个由@Serlite提供的答案救了我.现在我可以教我的同学这个默认行为,在我的书中说W3C的默认值是===.或者这本书是错的,或者本书是在CSS中讨论W3C ===因为你告诉我javascript规范是在ECMAS上而不是W3C. (3认同)
  • @Glauco虽然我确实理解了你原来的问题,但我明白为什么人们会感到困惑.有一点真正有用的是背景.如果我们知道你试图弄清楚你的书中的某些东西是错的并且误导了你的同学,那么它可能会更加清晰.只是想帮助:) (2认同)

dec*_*eze 5

Javascript aka ECMAScript不受W3C管辖,但受ECMA管辖.您可以在此处阅读规范.您感兴趣的是部分,它指定了如何if处理语句中的表达式.运行时应该调用toBoolean表达式值; 意味着任何类型都将转换为布尔值.

因此它表现得像==.

  • 行为以**"如果ToBoolean(GetValue(exprRef))为真......"**.这是一种语言规范,而不是教程.他们不使用术语"`==`".`ToBoolean()`是将任何类型转换为布尔值的方法,这意味着正在进行类型转换,这意味着它的行为类似于`==`*. (2认同)