这里真的需要JavaScript身份比较吗?

时间:2011-09-23 16:54:15

标签: javascript

这是来自Crockford的JavaScript: The Good Parts

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

如果他使用简单的等式比较==代替身份比较===,这段代码是否也能正常运作?

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

x == true

如果x为1或者为真,则评估为true,但

只有当x为真时,

x === true才会为真。

上面的is_array函数是否可以使用=====,而不能使用其他函数?

2 个答案:

答案 0 :(得分:4)

在这种特殊情况下,=====的工作方式相同。

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

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

答案 1 :(得分:3)

你是对的。使用==代替===它应该可以正常工作。

===是严格匹配,对于'falsy'或'truthy'值(see this更多详细信息)不会返回true。在这种情况下哪个不适用。