hasOwnProperty()
是否只检查用户创建的对象?
var myObj = {};
myObj.hasOwnProperty('toString'); // returns false
我想知道toString()
是在哪个原型(prototype)中使用的?
String.hasOwnProperty('toString');// it's too returns false
Object.hasOwnProperty('toString');// it's too returns false
那么,如何检查toString()
或其他东西是原型(prototype)链中的什么?
还有,
var myArr = ['a','b','c'];
myArr.hasOwnProperty('length');
// returns true, why? but it is of Array or Object...
最佳答案
Does
hasOwnProperty()
checks only user created objects only?
它适用于在其原型(prototype)链上具有该方法的所有对象(除某些宿主对象之外的所有对象,即一些 IE 对象,以及使用 Object.create(null)
创建的对象,以及以及其他一些奇特的方式)。
String
和 Object
没有直接使用 toString()
(尽管您可以分配自己,但不推荐这样做)。
但是,他们确实将它放在了他们的原型(prototype)链上。由于使用了匹配的第一个属性查找并且 String
是一个构造函数,它将在 Function.prototype
上找到它。您可以通过执行...来确认这一点
String.toString == Function.prototype.toString
其他对象有它们自己的 toString()
,这取决于什么在哪个上下文中最有意义。
var myArr = ['a','b','c']; myArr.hasOwnProperty('length');// returns true, why? but it is of Array or Object...
数组确实有一个直接在其上的 length
属性。
如果你想知道一个对象在它的原型(prototype)链上是否有可用的属性,你可以使用in
操作符...
var hasProp = 'toString' in String;
关于javascript - 如何使用 hasOwnProperty 检查属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23880333/