我最近看了一个指南,希望更好地理解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控制台时我看到它
答案 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?