当我们查看Underscore.js源代码时,我们可以看到以下内容:
_.isObject = function (obj) {
return obj === Object(obj);
};
我知道这行得通。
但是为什么不使用这个:
_.isObject = function(obj){
return typeof obj ==="object";
};
?
最佳答案
因为那不是我们想要测试的。 _.isObject
函数应该返回参数是否为引用值(即可以向其添加属性的对象)以及它是否不是原始值。
typeof
operator对此不可靠。它也会为值"object"
生成null
,而不会为可调用对象(即函数)生成"object"
。
相反,我们可以使用 Object
function,它会尝试通过ToObject将其参数“投射”到对象,并在参数已经是对象的情况下完全产生该参数。