这里真的需要JavaScript标识比较吗?

Is JavaScript identity compare really needed here?

本文关键字:比较 标识 JavaScript 真的 这里      更新时间:2023-09-26

这是来自Crockford的JavaScript: The Good Parts

var is_array = function (value) {
   return Object.prototype.toString.apply(value) === '[object Array]';
};

如果他使用一个简单的相等比较==,而不是恒等比较===,这段代码会不会同样有效?

我对恒等式的理解是,它允许你检查一个值是否真的被设置为特定的东西,而不仅仅是等价的东西。例如:

x == true

如果x为1,

将求值为真,或者为真,但是

x === true只有在x为真时才为真。

上面的is_array函数是否有可能与=====一起工作,而不是其他?

在本例中,=====的工作原理相同。

在这种情况下没有真正的区别,因为质量测试的两边都已经是字符串,所以==可以做的额外类型转换在这里不会起作用。由于这里没有任何类型转换,因此=====将生成相同的结果。

在我个人看来,我倾向于使用===,除非我明确希望允许类型转换,因为我认为对某些结果感到惊讶的可能性较小。

你是正确的。使用==而不是===,应该可以正常工作。

===是严格匹配,对于' false '或' true '值不会返回true(更多详细信息请参见此)。这在这种情况下是不适用的。