在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对象。

枚举属性和不可枚举属性相关推荐

  1. js对象转数组可枚举属性和不可枚举属性

    前言 项目里面很多地方我们需要把数据处理一下才能应用,包括我们拿到的是一个对象,但是我们需要遍历,这个时候就需要把对象转成数组来实现我们的目的了,js对象转数组有几种方法,归纳整理一下- js对象转数 ...

  2. JavaScript对象中的可枚举属性和不可枚举属性

    在JavaScript中,对象的属性有可枚举和不可枚举之分,它是由对象属性描述符enumerable决定的.如果该属性是可枚举性的那么这个属性就能被for-in查找遍历到. 对象的属性描述符 在Jav ...

  3. js的可枚举属性与不可枚举属性

    可枚举属性和不可枚举属性什么意思? 在javascript中,对象的属性可以分为可枚举属性和不可枚举属性,它们的属性由enumerable值决定,可枚举属性决定了这个属性能否被for in 遍历到 判 ...

  4. 可枚举属性和不可枚举属性(for...in循环和Objec.keys()和Object.getOwnPropertyNames())

    可枚举属性和不可枚举属性(for...in循环和Objec.keys()和Object.getOwnPropertyNames()) for...in循环是 遍历对象的每一个可枚举属性,包括原型链上面 ...

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

    在JavaScript中,对象的属性分为可枚举和不可枚举之分,它们是由属性的enumerable值决定的.可枚举性决定了这个属性能否被for-in查找遍历到. 一.怎么判断属性是否可枚举 js中基本包 ...

  6. JS对象的可枚举属性和不可枚举属性

    昨天在写文章(转载)的时候发现了有些对象的方法是分可枚举性和不可枚举性的. 简单的查了一下资料,今天来捋一捋啥是对象的可枚举啥是不可枚举. JS中对象转数组方法总结 可枚举性: 对象的每一个属性都有一 ...

  7. 可枚举属性和不可枚举属性

    (1)在js中,对象的属性分为可枚举和不可枚举,它们是由属性的enumerable值决定的,不可枚举属性,用for...in是遍历不到的,js中内置属性是遍历不到的. 举个例子: function P ...

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

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

  9. 可枚举属性与不可枚举属性

    转载自:https://www.cnblogs.com/kongxy/p/4618173.html 在JavaScript中,对象的属性分为可枚举和不可枚举之分,它们是由属性的enumerable值决 ...

最新文章

  1. php对图像的各种处理函数代码小结
  2. DNS(3)- 详解DNS的资源记录
  3. octave安装 缺java_Octave信号包安装
  4. 第三篇 12306自动刷票下单-下单
  5. JSONPath 解析 JSON 内容详解(翻译自 github)
  6. 数据科学包1---numpy
  7. 杨辉三角的几种 Python 实现方法
  8. 使用Sencha cmd安装extjs6
  9. python爬去淘宝客订单_Python 应用淘宝客API接口简单获取优惠券的实现
  10. linux定时器改变hz,linux定时器HZ和Jiffies
  11. 为何要使用加密邮箱?
  12. vue如何在一个工程里判断h5还是pc,(利用在一个页面显示不同router-view内容原理,本文只使用于单页面项目,多页面项目请查看我另一篇博文)
  13. 华为鸿蒙os手机计划表,华为为什么还没有推出鸿蒙OS智能手机的计划
  14. Excel数据表格操作01~~使用JXL操作数据
  15. fen分离整数的各个位
  16. 【AD封装】LED发光二极管(带3D)
  17. POJ 2815:城堡问题
  18. Emuelec自动清理无用图片和视频脚本
  19. x86指令集_当年基于动态翻译x86的企业倒闭了,龙芯为什么还要坚持
  20. 阜阳计算机专业国考,安徽公务员考试阜阳还有哪些岗位可以报考?

热门文章

  1. php把中文字符串拆分为单个字,php中UTF8字符串进行单字分割返回数组(包含中文)...
  2. 谁能从事最具幸福感的职业
  3. 一个简单的死锁demo以及死锁分析
  4. xftp 下载文件时提示 you do not have permission to download this folder
  5. 计算机中的域技术有限公司,计算机中的域是什么?怎样组建一个域?
  6. 计算机专业毕业祝福语,简短的毕业祝福语
  7. ‘NoneType‘ object has no attribute ‘shape‘
  8. 百度云上传(离线)接口,备份数据到百度云
  9. xbrl 数据比较分析_思考XML,使用XBRL分析财务报告
  10. vpp 中 load balance 的实现