当我们查看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将其参数“投射”到对象,并在参数已经是对象的情况下完全产生该参数。

07-26 05:45