存在以下问题。
使用typeof bar ===“object”来潜在的陷阱是什么? 确定bar是否为对象?怎么能避免这个陷阱?
其中的答案如下:
However, there’s one other alternative that returns false for nulls,
arrays, and functions, but true for objects:
console.log((bar !== null) && (bar.constructor === Object));
但是当我尝试我的代码时
var myObj =
{
name: "blah"
}
var bar =3;
console.log(typeof bar.constructor)
console.log(typeof myObj.constructor)
它为function
console.log
的输出
我的问题是(bar.constructor === Object)
为true
的对象类型为什么?
答案 0 :(得分:2)
"我的问题是
(bar.constructor === Object)
作为true
的对象类型是什么类型?"
通常,从Object.prototype
而不是某些中间构造函数.prototype
或null
继承 的对象。
请注意,直接从Object.prototype
继承而对.constructor
属性进行隐藏且具有自身值且不指向Object
的对象当然会产生{false
1}}相等比较的结果。
var o = {};
console.log(o.constructor === Object); // true
o.constructor = "foo";
console.log(o.constructor === Object); // false

此外,不直接从Object.prototype
继承的对象,而是来自其他具有.prototype
且 .constructor
属性的构造函数的对象将给出true
结果。
function Ctor() {}
var o = new Ctor();
console.log(o.constructor === Object); // false
delete Ctor.prototype.constructor;
console.log(o.constructor === Object); // true