hasownproperty(Object的几个方法(defineProperty,hasOwnProperty...))
你是否对于hasownproperty和Object的几个方法(defineProperty,hasOwnProperty...)感到困惑?别担心,今天小编将为您揭开这个谜团,让我们一同探索吧!
对象的枚举(for in、hasOwnProperty、in、instanceof)
对象取属性值有两种方法:
使用 for...in遍历对象:
每次循环,会把对象中的一个字符串类型的属性名保存到变量key中。(可以使用 console.log(typeof key);验证)
为什么obj.key会输出undefined呢?是因为它被转换为obj["key"]后去obj中去找属性名为“key”的值,而不是把key识别为一个变量,在obj中并没有定义属性“key”,所以是undefined。
那现在给obj添加属性“key”:
会发现每次循环输出属性名为“key”的属性值。
使用 for...in变量对象时若其原型上有自定义属性也会拿到。
那如果不想要输出原型上的属性,只要自身属性怎么做呢?
hasOwnProperty(“属性名”)可以验证属性是否为对象本身所具有,返回布尔值。
上面循环改为
“属性名” in对象判断对象是否有这个属性(包括原型上的属性),即对象是否能访问到这个属性,返回布尔值。
A instanceof B判断A对象的原型链上是否有B的原型对象。
Object的几个方法(defineProperty,hasOwnProperty...)
使用Object.defineProperty()定义对象属性时,如已设置 set或 get,就不能设置 writable和 value中的任何一个了,不然会报错。
Object的hasOwnProperty()方法返回一个布尔值,判断对象是否包含特定的自身(非继承)属性。
同defineProperty
getPrototypeOf此方法可以获取指定对象的原型对象
isPrototypeOf方法用于测试一个对象是否存在于另一个对象的原型链上。
列出一个由指定对象的所有自身属性的属性名(包括不可枚举属性但不包括Symbol值作为名称的属性)组成的数组。
区别于Object.keys()。
getOwnPropertyDescriptors方法用来获取一个对象的所有自身属性的描述符。
getOwnPropertyDescriptor方法用来获取一个对象的指定属性的描述符。
非常感谢您的阅读!我们希望本文对于解决您关于hasownproperty的问题提供了一些有价值的信息。如果您还有其他疑问,我们将很乐意为您提供进一步的帮助。