首先,事实:
if (booleanValue)
将满足任何真实值的语句,包括,任何非零数字,任何非空字符串值,任何对象或数组引用等...if
booleanValue
true
另一方面:
if (booleanValue === true)
仅当 正好等于 时,这才会满足条件。没有其他真理价值可以满足它。if
booleanValue
true
另一方面,如果您这样做:
if (someVar == true)
然后,Javascript将要做的是类型强制以匹配类型,然后比较两个变量。在很多情况下,这可能不是人们想要的。因此,在大多数情况下,您希望避免使用,因为关于Javascript如何类型强制两个事物为同一类型的规则相当长,除非您了解所有这些规则并且可以预测JS解释器在给定两种不同类型时可能所做的一切(大多数JS开发人员无法做到), 你可能想完全避免。true
someVar
==
==
举个例子,说明它可能是多么令人困惑:
var x;
x = 0;
console.log(x == true); // false, as expected
console.log(x == false); // true as expected
x = 1;
console.log(x == true); // true, as expected
console.log(x == false); // false as expected
x = 2;
console.log(x == true); // false, ??
console.log(x == false); // false
对于该值,您会认为这是一个真值,因此它可以与 有利地比较,但这不是类型强制的工作原理。它正在转换右手值以匹配左手值的类型,因此它转换为数字,因此它正在比较,这肯定不是您可能想要的。2
2
true
true
1
2 == 1
因此,买家要小心。在几乎所有情况下,最好避免使用,除非您明确知道将要比较的类型,并且知道所有可能的类型强制算法的工作原理。==
因此,这实际上取决于代码的预期值以及您希望代码如何工作。如果您事先知道它只会有一个或值,那么将其与booleanValue
true
false
if (booleanValue === true)
只是额外的代码和不必要的和
if (booleanValue)
更紧凑,可以说更干净/更好。
另一方面,如果您不知道可能是什么,并且想要测试它是否确实设置为不允许其他自动类型转换,则booleanValue
true
if (booleanValue === true)
不仅是一个好主意,而且是必需的。
例如,如果您查看 jQuery 中的 实现,它有一个可选的返回值。如果回调返回,则 jQuery 将自动停止事件的传播。在这种特定情况下,由于jQuery只想在返回时才停止传播,因此他们检查返回值显式,因为他们不希望or或或其他任何会自动类型转换为false的东西来满足比较。.on()
false
false
=== false
undefined
0
""
例如,下面是 jQuery 事件处理回调代码:
ret = ( specialHandle || handleObj.handler ).apply( matched.elem, args );
if ( ret !== undefined ) {
event.result = ret;
if ( ret === false ) {
event.preventDefault();
event.stopPropagation();
}
}
您可以看到 jQuery 明确地查找 .ret === false
但是,在jQuery代码中还有许多其他地方,根据代码的愿望,更简单的检查是合适的。例如:
// The DOM ready check for Internet Explorer
function doScrollCheck() {
if ( jQuery.isReady ) {
return;
}
...