当我们查看Underscore.js源代码时,我们可以看到以下内容:
_.isObject = function (obj) {
return obj === Object(obj);
};
我知道它有效。
但为什么不用这个:
_.isObject = function(obj){
return typeof obj ==="object";
};
答案 0 :(得分:7)
区别在于棘手的价值null
。 typeof null
会返回'object'
,这显然非常令人困惑,而不是理想的结果。
但是,使用带有null
的对象构造函数会导致创建新对象(请参阅MDN)。这意味着您可以区分null
typeof
无法做到的对象和{{1}}。
答案 1 :(得分:5)
为什么不使用
typeof obj === "object"
因为那不是我们想要测试的。 _.isObject
函数应该返回参数是否是参考值(即可以添加属性的对象)以及它是否是原始值。
typeof
operator对此不可靠。对于值"object"
,它也会产生null
,并且对于可调用对象(即函数)不会产生"object"
。
相反,我们可以使用Object
function来试图"施放"它通过ToObject对一个对象的参数,并且在它已经是一个对象的情况下将完全产生该参数。