如何使用hasOwnProperty检查属性?

时间:2014-05-27 02:45:23

标签: javascript

hasOwnProperty()仅检查用户创建的对象吗?

var myObj = {};
myObj.hasOwnProperty('toString'); // returns false

我想知道toString()用于哪个原型?

String.hasOwnProperty('toString');// it's too returns false
Object.hasOwnProperty('toString');// it's too returns false

那么,如何检查toString()或其他什么是原型链中的内容?

而且,

var myArr = ['a','b','c'];
myArr.hasOwnProperty('length');
// returns true, why? but it is of Array or Object...

1 个答案:

答案 0 :(得分:4)

  

hasOwnProperty()仅检查用户创建的对象吗?

它适用于在其原型链上具有该方法的所有对象(除了某些主机对象之外的所有对象,即一些IE对象,以及使用Object.create(null)创建的对象,以及一些其他外来方式)。

StringObject默认情况下不会直接toString()(尽管你可以分配自己,但这不会建议)。

然而,他们确实在他们的原型链上拥有它。由于使用了匹配的第一个属性查找,并且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属性。

如果您想知道某个对象的原型链是否有可用的属性,您可以使用in运算符......

var hasProp = 'toString' in String;