当bar.constructor ===对象是真的吗?

时间:2018-01-09 17:19:34

标签: javascript

totpal

存在以下问题。

  

使用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的对象类型为什么?

1 个答案:

答案 0 :(得分:2)

  

"我的问题是(bar.constructor === Object)作为true的对象类型是什么类型?"

通常,从Object.prototype而不是某些中间构造函数.prototypenull继承 的对象。

请注意,直接从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