今天俺跟大家一起来学习一下一个很小的知识点,那就是属性描述符,需要注意的是该功能是在 ES5 之后才出现的,也就是说 ES5 之前伟大的 JS 创造者并没有开放出该功能~ 大家现在知道了吧,其实我们学习的语言并不是什么天生的大神创造的,本身每一个语言都会有或多或少的问题,因此需要不断的学习每一个语言的新特性,程序员是真的苦逼,不仅要研究业务的 bug,还要不断适应新版本解决语言本身存在的一些 bug。
ES5 之后,所有的属性都存在属性描述符这个属性。获取属性描述符属性的方法是:
Object.getOwnPropertyDescriptor
以下面的代码为例:
var object = {a: 2}
Object.getOwnPropertyDescriptor(object,”a”);// 返回 {value: 2, writable: true, enumerable: true, configurable: true}
该方法返回的是一个对象,该对象除了包含 value 为 2 的属性外,还包含了属性的三个特性。
writable(是否可修改属性的值)
enumerable(是否出现在对象的属性枚举中)
configurable(是否可配置,属性设置为 false 之后,该属性值为不可逆的,也就是说不能再修改为 true 了)
我们举一个设置数组的 enumerable 为例:
var arr = [1,2,3]
Object.getOwnPropertyDescriptor(arr,'0',{enumerable:false});
for(var a in arr){console.log(arr[a]) // 输出 2,3
}
arr.forEach(function(item,index){console.log(item) // 输出 1,2,3
})
因为 for in 遍历的是可枚举属性,因此没有输出 1。
希望本篇文章的知识点,帮助到有需要的小伙伴~
原文链接:文章地址