JS中的枚举和不可枚举

一、枚举是什么

  • 枚举指对象的属性是否可以遍历出来,简单点说就是是否可以被列举出来。可枚举性决定了这个属性能否被for…in查找遍历到。
  • js中基本包装类型的原型属性是不可枚举的,比如:

基本包装类型:Boolean,Number和String,就是即是基本类型,也是引用类型。基本包装类型还可以像引用类型一样通过对象的方法访问它自带的一些方法,但是不能像引用类型那样自定义方法。

结果为空,因为Number中内置的属性是不可枚举的;

  • 判断一个属性是否可枚举,用Object.propertyIsEnumerable()来判断,但需要注意的一点是如果需要判断的属性在object的原型链上,不管它是否可枚举,Object.propertyIsEnumerable()都会返回false

propertyIsEnumerable() 方法返回一个布尔值,表示指定的属性是否可枚举。但是在原型链上propertyIsEnumerable不被考虑
hasOwnProperty()方法会返回一个布尔值,指示对象自身属性中是否具有指定的属性

二、枚举性的作用

  • 属性的枚举性会影响以下三个函数的结果:

for…in

Object.keys()

JSON.stringify()
举例:

1、 .for…in循环可以枚举(遍历)出对象本身具有的属性,通过Object.defineProperty()方法加的可枚举属性,或者通过原型对象绑定的可以枚举属性。

 

 



原文地址:https://www.cnblogs.com/1549983239yifeng/p/14456650.html