为什么hasOwnProperty('toString')不能在对象上工作?

时间:2017-12-16 19:31:53

标签: javascript object hasownproperty

我最近看了一个指南,希望更好地理解hasOwnProperty的概念。

根据Mozilla的说法:

“hasOwnProperty()方法返回一个布尔值,指示对象是否具有指定的属性作为自己的(非继承)属性。”

我创建了一个对象

var test = {yes:function(){}}

然后做了

test.hasOwnProperty('toString')

它返回false。因为toString是一种我没有在测试中创建的方法吗?

但是如果我将hasOwnProperty记录到一个数组并传递长度,那么

var arr1 = new Array
arr.hasOwnProperty('length') //appears to return true

它返回true,但我从未声明长度。

我认为hasOwnProperty仅适用于未继承的属性 -

那么为什么在数组对象继承length属性时,对数组使用hasownprop('length')会返回true,

但是

var test = {yes:function(){}}
test.hasOwnProperty('toString') //false

为什么^这会返回false? toString是对象原型的方法,当我将其登录到谷歌Chrome控制台时我看到它

1 个答案:

答案 0 :(得分:1)

  

因为toString是我在测试中没有创建的方法吗?

是的,从对象文字创建的对象只有在文字中声明的属性。

但是你没有明确声明属性并不意味着它是继承的,或者它不存在。数组确实有一个自己的.length属性,它基本上是由数组构造函数创建的 - 在new Array调用中。

想象一下:

function Test() {
    this.prop = "some value";
}
var x = new Test;
console.log(x.hasOwnProperty("prop")) // what do you expect?