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

时间:2014-05-08 15:08:26

标签: javascript underscore.js

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

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

我知道它有效。

但为什么不用这个:

    _.isObject = function(obj){
    return typeof obj ==="object";
};

2 个答案:

答案 0 :(得分:7)

区别在于棘手的价值nulltypeof null会返回'object',这显然非常令人困惑,而不是理想的结果。

但是,使用带有null的对象构造函数会导致创建新对象(请参阅MDN)。这意味着您可以区分null typeof无法做到的对象和{{1}}。

答案 1 :(得分:5)

  

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

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

typeof operator对此不可靠。对于值"object",它也会产生null,并且对于可调用对象(即函数)不会产生"object"

相反,我们可以使用Object function来试图"施放"它通过ToObject对一个对象的参数,并且在它已经是一个对象的情况下将完全产生该参数。