当我们查看Underscore.js源代码时,我们可以看到以下内容:
_.isObject = function (obj) {
return obj === Object(obj);
};我知道很管用。
但为什么不用这个:
_.isObject = function(obj){
return typeof obj ==="object";
};发布于 2014-05-08 15:57:24
为什么不使用
typeof obj === "object"
因为这不是我们想要测试的。_.isObject函数应该返回参数是否是引用值(即可以向其添加属性的对象)以及它是否为原语值。
运算符在这方面不可靠。它还为值"object"生成null,而不为可调用对象(即函数)生成"object"。
相反,我们可以使用函数,它将尝试通过ToObject将它的参数“转换”给一个对象,并且在它已经是对象的情况下准确地产生这个参数。
发布于 2014-05-08 15:17:09
区别在于棘手的值null。typeof null返回'object',这显然是相当混乱的,而不是期望的结果。
但是,使用带有null的对象构造函数将导致创建一个新对象(请参阅MDN)。这意味着您可以区分对象和null,这是typeof无法做到的。
https://stackoverflow.com/questions/23545656
复制相似问题