我知道==
和===
的区别,但是我一直认为if (condition)
condition
应该使用严格等式(===
)而不是类型胁迫等式(==
)来评估true
。
见一个例子:
if (1) {
console.log("1");
}
if (1 == true) {
console.log("2");
}
if (1 === true) {
console.log("3");
}
它返回:
::1
::2
我知道1并不严格等于true
,因为类型不同,但是当我根据W3C执行if (condition)
时,应该是严格的等式测试(===
),而不是==
的类型强制相等。
那么为什么是日志1呢?
发布于 2013-07-26 06:23:00
if
语句使用condition == true
。它是在ECMAScript语言规范中给出的,在这里:http://www.ecma-international.org/ecma-262/5.1/#sec-12.5
注意步骤2中ToBoolean()
的使用,这会将给定的参数转换为布尔值,这意味着if
语句的条件确实会发生类型强制。
发布于 2013-07-26 06:24:40
发布于 2013-07-26 06:17:54
因为===
是严格的比较运算符。
if (1 === true) { //they are of a different type
你试过这个吗?
if (0) { // This fails
console.log("1");
}
因为0 = off, negative, no, false
普遍存在。检查这个为什么0是假的?
而当你使用===
的时候
if( 1 === true) //It looks for type 1 as number and true as boolean
https://stackoverflow.com/questions/17883717
复制