首先,事实:
if (booleanValue)
将满足if
语句的任何truthy值booleanValue
包括true
,任何非零数量,任何非空字符串值,任何物体或阵列基准,等...
另一方面:
if (booleanValue === true)
这将仅满足if
条件如果booleanValue
完全等于true
。没有其他真实值可以满足它。
另一方面,如果你这样做:
if (someVar == true)
然后,Javascript 要做的是强制类型true
匹配someVar
,然后比较两个变量的类型。在很多情况下,这可能不是人们想要的。正因为如此,在大多数情况下你想避免,==
因为关于 Javascript 如何将两个东西强制为相同类型的规则有相当长的一套,除非你理解所有这些规则并且可以预测 JS 解释器可能会做的一切给定两种不同的类型(大多数 JS 开发人员不能),您可能希望==
完全避免。
作为一个例子,说明它有多混乱:
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
对于 value 2
,您会认为这2
是一个真实值,因此它会与 相比更有利true
,但这不是类型强制的工作方式。它正在转换右手值以匹配左手值的类型,因此将其转换true
为数字,1
以便进行比较2 == 1
,这肯定不是您想要的。
所以,买家要小心。==
在几乎所有情况下最好避免,除非您明确知道要比较的类型并知道所有可能的类型强制算法如何工作。
因此,这实际上取决于booleanValue
代码的预期值以及您希望代码如何工作。如果您事先知道它只会有 a true
orfalse
值,那么将它明确地与
if (booleanValue === true)
只是额外的代码和不必要的
if (booleanValue)
更紧凑,可以说更清洁/更好。
另一方面,如果您不知道booleanValue
可能是什么并且您想测试它是否真的设置为true
并且不允许其他自动类型转换,那么
if (booleanValue === true)
不仅是个好主意,而且是必需的。
例如,如果您查看.on()
jQuery中的实现,它有一个可选的返回值。如果回调返回false
,则 jQuery 将自动停止事件的传播。在这种特定情况下,由于 jQuery 只希望false
在返回时停止传播,因此他们明确检查返回值,=== false
因为他们不想要undefined
or0
或""
或其他任何会自动将类型转换为 false 以满足比较的东西。
例如,这里是 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;
}
...