今天俺跟大家一起来学习一下一个很小的知识点,那就是属性描述符,需要注意的是该功能是在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的属性外,还包含了属性的三个特性。

  1. writable (是否可修改属性的值)
  2. enumerable (是否出现在对象的属性枚举中)
  3. 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。

希望本篇文章的知识点,帮助到有需要的小伙伴~