Underscore.js _.isObject = function(obj){return obj === Object(obj); };

gon*_*eek 8 javascript underscore.js

当我们查看Underscore.js源代码时,我们可以看到以下内容:

    _.isObject = function (obj) {
    return obj === Object(obj);
};
Run Code Online (Sandbox Code Playgroud)

我知道它有效.

但为什么不使用这个:

    _.isObject = function(obj){
    return typeof obj ==="object";
};
Run Code Online (Sandbox Code Playgroud)

?

lon*_*day 7

区别在于棘手的价值null.typeof null返回'object',这显然很混乱,而不是理想的结果.

但是,使用对象构造函数会null导致创建新对象(请参阅MDN).这意味着您可以区分对象null,而typeof不能区分对象.


Ber*_*rgi 5

为什么不用 typeof obj === "object"

因为那不是我们想要测试的.该_.isObject函数应该返回参数是否是参考值(即可以添加属性的对象)以及它是否不是原始值.

该typeof操作是不可靠的那个.它也会"object"为该值生成null,并且不会"object"为可调用对象(即函数)生成.

相反,我们可以使用Object函数来尝试通过ToObject将其参数"转换"为对象,并且在它已经是对象的情况下将完全产生参数.