枚举属性和不可枚举属性
在JavaScript中,对象的属性分为可枚举和不可枚举之分,它们是由属性的enumerable值决定的。可枚举性决定了这个属性能否被for…in查找遍历到。
一、怎么判断属性是否可枚举
js中基本包装类型的原型属性是不可枚举的,如Object, Array, Number等,如果你写出这样的代码遍历其中的属性:
var num = new Number();for(var pro in num) {console.log("num." + pro + " = " + num[pro]);}
它的输出结果会是空。这是因为Number中内置的属性是不可枚举的,所以不能被for…in访问到。
Object对象的propertyIsEnumerable()方法可以判断此对象是否包含某个属性,并且这个属性是否可枚举。
需要注意的是:如果判断的属性存在于Object对象的原型内,不管它是否可枚举都会返回false。
二、枚举性的作用
属性的枚举性会影响以下三个函数的结果:
for…in
Object.keys()
JSON.stringify
先看一个例子,按如下方法创建kxy对象:
function Person() {this.name = "KXY";
}
Person.prototype = {constructor: Person,job: "student",
};var kxy = new Person();
Object.defineProperty(kxy, "sex", {value: "female",enumerable: false
});
其中用defineProperty为对象定义了一个名为”sex”的不可枚举属性
接下来做以下验证:
for(var pro in kxy) {console.log("kxy." + pro + " = " + kxy[pro]);}
遍历结果:
枚举性检验1
可以看到除了”sex“之外的属性都遍历到了
console.log(Object.keys(kxy));
结果:
枚举性检验2
只包含”name”属性,说明该方法只能返回对象本身具有的可枚举属性。
console.log(JSON.stringify(kxy));
<结果:
可枚举性检验3
此方法也只能读取对象本身的可枚举属性,并序列化为JSON对象。
枚举属性和不可枚举属性相关推荐
- js对象转数组可枚举属性和不可枚举属性
前言 项目里面很多地方我们需要把数据处理一下才能应用,包括我们拿到的是一个对象,但是我们需要遍历,这个时候就需要把对象转成数组来实现我们的目的了,js对象转数组有几种方法,归纳整理一下- js对象转数 ...
- JavaScript对象中的可枚举属性和不可枚举属性
在JavaScript中,对象的属性有可枚举和不可枚举之分,它是由对象属性描述符enumerable决定的.如果该属性是可枚举性的那么这个属性就能被for-in查找遍历到. 对象的属性描述符 在Jav ...
- js的可枚举属性与不可枚举属性
可枚举属性和不可枚举属性什么意思? 在javascript中,对象的属性可以分为可枚举属性和不可枚举属性,它们的属性由enumerable值决定,可枚举属性决定了这个属性能否被for in 遍历到 判 ...
- 可枚举属性和不可枚举属性(for...in循环和Objec.keys()和Object.getOwnPropertyNames())
可枚举属性和不可枚举属性(for...in循环和Objec.keys()和Object.getOwnPropertyNames()) for...in循环是 遍历对象的每一个可枚举属性,包括原型链上面 ...
- JavaScript中的可枚举属性与不可枚举属性
在JavaScript中,对象的属性分为可枚举和不可枚举之分,它们是由属性的enumerable值决定的.可枚举性决定了这个属性能否被for-in查找遍历到. 一.怎么判断属性是否可枚举 js中基本包 ...
- JS对象的可枚举属性和不可枚举属性
昨天在写文章(转载)的时候发现了有些对象的方法是分可枚举性和不可枚举性的. 简单的查了一下资料,今天来捋一捋啥是对象的可枚举啥是不可枚举. JS中对象转数组方法总结 可枚举性: 对象的每一个属性都有一 ...
- 可枚举属性和不可枚举属性
(1)在js中,对象的属性分为可枚举和不可枚举,它们是由属性的enumerable值决定的,不可枚举属性,用for...in是遍历不到的,js中内置属性是遍历不到的. 举个例子: function P ...
- JS中的可枚举属性与不可枚举属性的学习以及扩展
最近在学习对象遍历的方法时总是能看到的两个词,一个是"原型",一个是"枚举属性".一开始感觉自己大概明白"枚举属性"的意思,但是叫我解释却又 ...
- 可枚举属性与不可枚举属性
转载自:https://www.cnblogs.com/kongxy/p/4618173.html 在JavaScript中,对象的属性分为可枚举和不可枚举之分,它们是由属性的enumerable值决 ...
最新文章
- php对图像的各种处理函数代码小结
- DNS(3)- 详解DNS的资源记录
- octave安装 缺java_Octave信号包安装
- 第三篇 12306自动刷票下单-下单
- JSONPath 解析 JSON 内容详解(翻译自 github)
- 数据科学包1---numpy
- 杨辉三角的几种 Python 实现方法
- 使用Sencha cmd安装extjs6
- python爬去淘宝客订单_Python 应用淘宝客API接口简单获取优惠券的实现
- linux定时器改变hz,linux定时器HZ和Jiffies
- 为何要使用加密邮箱?
- vue如何在一个工程里判断h5还是pc,(利用在一个页面显示不同router-view内容原理,本文只使用于单页面项目,多页面项目请查看我另一篇博文)
- 华为鸿蒙os手机计划表,华为为什么还没有推出鸿蒙OS智能手机的计划
- Excel数据表格操作01~~使用JXL操作数据
- fen分离整数的各个位
- 【AD封装】LED发光二极管(带3D)
- POJ 2815:城堡问题
- Emuelec自动清理无用图片和视频脚本
- x86指令集_当年基于动态翻译x86的企业倒闭了,龙芯为什么还要坚持
- 阜阳计算机专业国考,安徽公务员考试阜阳还有哪些岗位可以报考?
热门文章
- php把中文字符串拆分为单个字,php中UTF8字符串进行单字分割返回数组(包含中文)...
- 谁能从事最具幸福感的职业
- 一个简单的死锁demo以及死锁分析
- xftp 下载文件时提示 you do not have permission to download this folder
- 计算机中的域技术有限公司,计算机中的域是什么?怎样组建一个域?
- 计算机专业毕业祝福语,简短的毕业祝福语
- ‘NoneType‘ object has no attribute ‘shape‘
- 百度云上传(离线)接口,备份数据到百度云
- xbrl 数据比较分析_思考XML,使用XBRL分析财务报告
- vpp 中 load balance 的实现