这是来自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函数是否可以使用==
或===
,而不能使用其他函数?
答案 0 :(得分:4)
在这种特殊情况下,==
和===
的工作方式相同。
在这种情况下没有真正的区别,因为质量测试的两端都已经是字符串,所以==
可以做的额外类型转换不会在这里发挥作用。由于此处从未进行任何类型转换,因此==
和===
将生成相同的结果。
根据我个人的意见,我倾向于使用===
,除非我明确希望允许类型转换,因为我认为对某些结果感到惊讶的可能性较小。
答案 1 :(得分:3)
你是对的。使用==
代替===
它应该可以正常工作。
===
是严格匹配,对于'falsy'或'truthy'值(see this更多详细信息)不会返回true。在这种情况下哪个不适用。