枚举是什么???

枚举是指对象中的属性是否可以遍历出来,再简单点说就是属性是否可以以列举出来。

在js中基本的数据类型是不能被枚举的。例如Object、Array等。

枚举方法的区别

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

function enumer() {this.a = '我是对象本身就有的属性';
}
enumer.prototype.b = '我是通过原型对象挂载的属性';
let fn = new enumer();
Object.defineProperty(fn, 'c', {value: '我是通过Object.defineProperty方法添加的可枚举属性',enumerable: true  // 是否可以枚举
});
for(let item in fn) {console.log(item);
}
/*输出*/
// a
// b
// c

2.Object.keys()方法可以枚举对象本身的属性和通过Object.defineProperty()添加的可枚举属性

function enumer() {this.a = '我是对象本身就有的属性';
}
enumer.prototype.b = '我是通过原型对象挂载的属性';
let fn = new enumer();
Object.defineProperty(fn, 'c', {value: '我是通过Object.defineProperty方法添加的可枚举属性',enumerable: true
});
console.log(Object.keys(fn));
/*输出*/
// ["a", "c"]

3.JSON.stringify()方法只能序列化本身的属性和通过Object.defineProperty()添加的可枚举属性为JSON对象

function enumer() {this.a = '我是对象本身就有的属性';
}
enumer.prototype.b = '我是通过原型对象挂载的属性';
let fn = new enumer();
Object.defineProperty(fn, 'c', {value: '我是通过Object.defineProperty方法添加的可枚举属性',enumerable: true
});
console.log(JSON.stringify(fn));
// {"a":"我是对象本身就有的属性","c":"我是通过Object.defineProperty方法添加的可枚举属性"}

-

js中的枚举和不可枚举相关推荐

  1. js中的枚举类型和不可枚举类型

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

  2. JS中可枚举属性(enumerable)和propertyIsEnumerable()

    什么是可枚举属性 枚举就是列举,可枚举属性就是可以列举的属性,直白一点就是可以用for in遍历到的属性. propertyIsEnumerable()的用法 obj.propertyIsEnumer ...

  3. JS中的可枚举属性与不可枚举属性的学习以及扩展

    最近在学习对象遍历的方法时总是能看到的两个词,一个是"原型",一个是"枚举属性".一开始感觉自己大概明白"枚举属性"的意思,但是叫我解释却又 ...

  4. Reflect.ownKeys()与Object.keys()区别 以及 JS中的可枚举属性与不可枚举属性

    代码test1: var obj = {} Object.defineProperty(obj, 'method1', {value: function () {alert("Non enu ...

  5. JS中的可枚举属性与不可枚举属性

    一.怎么判断属性是否可枚举 js中基本包装类型的原型属性是不可枚举的,如Object, Array, Number等,如果你写出这样的代码遍历其中的属性: var num = new Number() ...

  6. js 中的可枚举属性

    前言 首先,可枚举属性是指那些内部 "可枚举" 标志设置为 true 的属性,而这个"可枚举"标志,即enumerable. 对于通过直接的赋值和属性初始化的属 ...

  7. js 枚举 和 不可枚举

    枚举是什么? 枚举是指对象中的属性是否可以遍历出来,再简单点说就是属性是否可以以列举出来,不可枚举顾名思义. 注:在js中基本的数据类型是不能被枚举的. 1.for...in 循环可枚举(遍历)出对象 ...

  8. vue中引用js_从JS中的内存管理说起 —— JS中的弱引用

    点击上方"蓝字"关注本公众号 写在前面 在所有的编程语言中,我们声明一个变量时,需要系统为我们分配一块内存.当我们不再需要这个变量时,需要将内存进行回收(这个过程称之为垃圾回收). ...

  9. 详解JS中的原型与继承

    每当我们提起原型链时不免会想到原型对象,对象的原型,还有众多的继承方式.于是prototype.[[prototype]].constructor等等难免在头脑中打架. 然而原型其实并不是什么高大上的 ...

最新文章

  1. 深度学习中7种最优化算法的可视化与理解
  2. js 空数组是true还是false
  3. APP专项测试关注点介绍
  4. OVS ovs-vsctl(二十五)
  5. Docker四种网络模式
  6. Yii2的MVC新特性
  7. Tooltip工具提示控件的使用
  8. DbHelper数据库通用类使用方法
  9. 魔兽世界python脚本拍卖行_Python大法之告别脚本小子系列—信息资产收集类脚本编写(上)...
  10. mysqldump 导出中文乱码
  11. open cv+C++错误及经验总结(十一)
  12. svg绘图工具raphael.js的使用
  13. Java集合类和HashMap遍历
  14. Android常用控件基础知识
  15. 数据结构:算法的时间复杂度和空间复杂度
  16. JAVA学习day30--方法的重写
  17. C语言编程--根据麦克劳林公式计算任意角的正弦余弦
  18. 度秘语音引擎app_「资源」9个(实时)语音转文字APP分享(推荐收藏)
  19. Android OkHttp是如何上位的?
  20. 微信小程序预览文件,word、xlsx文件打不开?

热门文章

  1. Linux下G4L硬盘备份方案
  2. 蜗牛星际改内存_蜗牛星际C款双I211网卡4G内穿13SATA开箱及网卡测试
  3. UE5——动画混合(2)
  4. DirectX学习错误1
  5. JS根据id删除元素
  6. VS2015(Install Shield 2015 )打包教程。集成第三方驱动。修改安装包图标、安装风格。
  7. 定时刷新IE页面的VBS脚本
  8. Thinkphp 反序列化深入分析pop利用链
  9. 网站推荐:11个相似图片搜索网站(以图找图)
  10. u大侠装服务器系统,U大侠U盘安装Ghost win7系统教程_如何用u盘装win7系统 - U大侠,装机专家...