我最近看了一本指南,想更好地了解 hasOwnProperty 的概念。
根据 Mozilla 的说法:
“hasOwnProperty() 方法返回一个 bool 值,指示对象是否将指定属性作为自己的(非继承)属性。”
我创建了一个对象
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 是对象原型(prototype)上的方法,当我将其登录到 Google Chrome 控制台时我会看到它
最佳答案
Its because toString is a method that I did NOT create right inside test right?
是的,从对象字面量创建的对象只具有在字面量中声明的自己的属性。
但是,您没有显式声明属性并不意味着它是继承的,或者它不存在。数组确实有一个自己的 .length
属性,该属性基本上是由数组构造函数在 new Array
调用中创建的。
想象一下以下情况:
function Test() {
this.prop = "some value";
}
var x = new Test;
console.log(x.hasOwnProperty("prop")) // what do you expect?
关于javascript - 为什么 hasOwnProperty ('toString' ) 不适用于对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47849243/