js中的枚举和不可枚举
枚举是什么???
枚举是指对象中的属性是否可以遍历出来,再简单点说就是属性是否可以以列举出来。
在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中的枚举和不可枚举相关推荐
- js中的枚举类型和不可枚举类型
枚举:是指对象中的属性可以遍历出来,再简单点就是属性可以列举出来. 可枚举性决定了这个属性能否被for-in查找遍历到. js中基本包装类型的原型属性是不可枚举的,如Object, Array, Nu ...
- JS中可枚举属性(enumerable)和propertyIsEnumerable()
什么是可枚举属性 枚举就是列举,可枚举属性就是可以列举的属性,直白一点就是可以用for in遍历到的属性. propertyIsEnumerable()的用法 obj.propertyIsEnumer ...
- JS中的可枚举属性与不可枚举属性的学习以及扩展
最近在学习对象遍历的方法时总是能看到的两个词,一个是"原型",一个是"枚举属性".一开始感觉自己大概明白"枚举属性"的意思,但是叫我解释却又 ...
- Reflect.ownKeys()与Object.keys()区别 以及 JS中的可枚举属性与不可枚举属性
代码test1: var obj = {} Object.defineProperty(obj, 'method1', {value: function () {alert("Non enu ...
- JS中的可枚举属性与不可枚举属性
一.怎么判断属性是否可枚举 js中基本包装类型的原型属性是不可枚举的,如Object, Array, Number等,如果你写出这样的代码遍历其中的属性: var num = new Number() ...
- js 中的可枚举属性
前言 首先,可枚举属性是指那些内部 "可枚举" 标志设置为 true 的属性,而这个"可枚举"标志,即enumerable. 对于通过直接的赋值和属性初始化的属 ...
- js 枚举 和 不可枚举
枚举是什么? 枚举是指对象中的属性是否可以遍历出来,再简单点说就是属性是否可以以列举出来,不可枚举顾名思义. 注:在js中基本的数据类型是不能被枚举的. 1.for...in 循环可枚举(遍历)出对象 ...
- vue中引用js_从JS中的内存管理说起 —— JS中的弱引用
点击上方"蓝字"关注本公众号 写在前面 在所有的编程语言中,我们声明一个变量时,需要系统为我们分配一块内存.当我们不再需要这个变量时,需要将内存进行回收(这个过程称之为垃圾回收). ...
- 详解JS中的原型与继承
每当我们提起原型链时不免会想到原型对象,对象的原型,还有众多的继承方式.于是prototype.[[prototype]].constructor等等难免在头脑中打架. 然而原型其实并不是什么高大上的 ...
最新文章
- 深度学习中7种最优化算法的可视化与理解
- js 空数组是true还是false
- APP专项测试关注点介绍
- OVS ovs-vsctl(二十五)
- Docker四种网络模式
- Yii2的MVC新特性
- Tooltip工具提示控件的使用
- DbHelper数据库通用类使用方法
- 魔兽世界python脚本拍卖行_Python大法之告别脚本小子系列—信息资产收集类脚本编写(上)...
- mysqldump 导出中文乱码
- open cv+C++错误及经验总结(十一)
- svg绘图工具raphael.js的使用
- Java集合类和HashMap遍历
- Android常用控件基础知识
- 数据结构:算法的时间复杂度和空间复杂度
- JAVA学习day30--方法的重写
- C语言编程--根据麦克劳林公式计算任意角的正弦余弦
- 度秘语音引擎app_「资源」9个(实时)语音转文字APP分享(推荐收藏)
- Android OkHttp是如何上位的?
- 微信小程序预览文件,word、xlsx文件打不开?
热门文章
- Linux下G4L硬盘备份方案
- 蜗牛星际改内存_蜗牛星际C款双I211网卡4G内穿13SATA开箱及网卡测试
- UE5——动画混合(2)
- DirectX学习错误1
- JS根据id删除元素
- VS2015(Install Shield 2015 )打包教程。集成第三方驱动。修改安装包图标、安装风格。
- 定时刷新IE页面的VBS脚本
- Thinkphp 反序列化深入分析pop利用链
- 网站推荐:11个相似图片搜索网站(以图找图)
- u大侠装服务器系统,U大侠U盘安装Ghost win7系统教程_如何用u盘装win7系统 - U大侠,装机专家...