JavaScript中的可枚举属性与不可枚举属性
在JavaScript中,对象的属性分为可枚举和不可枚举之分,它们是由属性的enumerable值决定的。可枚举性决定了这个属性能否被for…in查找遍历到。
一、怎么判断属性是否可枚举
js中基本包装类型的原型属性是不可枚举的,如Object, Array, Number等,如果你写出这样的代码遍历其中的属性:
| 1 2 3 4 | varnum = newNumber();for(varpro innum) {    console.log("num."+ pro + " = "+ num[pro]);} | 
它的输出结果会是空。这是因为Number中内置的属性是不可枚举的,所以不能被for…in访问到。
Object对象的propertyIsEnumerable()方法可以判断此对象是否包含某个属性,并且这个属性是否可枚举。
需要注意的是:如果判断的属性存在于Object对象的原型内,不管它是否可枚举都会返回false。
二、枚举性的作用
属性的枚举性会影响以下三个函数的结果:
for…in
Object.keys()
JSON.stringify
先看一个例子,按如下方法创建kxy对象:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 | functionPerson() {    this.name = "KXY";}Person.prototype = {    constructor: Person,    job: "student",};varkxy = newPerson();Object.defineProperty(kxy, "sex", {    value: "female",    enumerable: false}); | 
其中用defineProperty为对象定义了一个名为”sex”的不可枚举属性
接下来做以下验证:
1.
| 1 2 3 | for(varpro inkxy) {    console.log("kxy."+ pro + " = "+ kxy[pro]);  } | 
遍历结果:

可以看到除了”sex“之外的属性都遍历到了
2.
| 1 | console.log(Object.keys(kxy)); | 
结果:

只包含”name”属性,说明该方法只能返回对象本身具有的可枚举属性。
3.
| 1 | console.log(JSON.stringify(kxy)); | 
<结果:

此方法也只能读取对象本身的可枚举属性,并序列化为JSON对象。
JavaScript中的可枚举属性与不可枚举属性的更多相关文章
- JS中的可枚举属性与不可枚举属性以及扩展
		在JavaScript中,对象的属性分为可枚举和不可枚举之分,它们是由属性的enumerable值决定的.可枚举性决定了这个属性能否被for…in查找遍历到. 一.怎么判断属性是否可枚举 js中基本包 ... 
- js中的可枚举属性与不可枚举属性
		在JavaScript中,对象的属性分为可枚举和不可枚举之分,它们是由属性的enumerable值决定的.可枚举性决定了这个属性能否被for…in查找遍历到. 一.怎么判断属性是否可枚举 js中基本包 ... 
- <JavaScript>可枚举属性与不可枚举属性
		在JavaScript中,对象的属性分为可枚举和不可枚举之分,它们是由属性的enumerable值决定的.可枚举性决定了这个属性能否被for…in查找遍历到. 一.怎么判断属性是否可枚举 js中基本包 ... 
- JS对象的可枚举属性和不可枚举属性
		昨天在写文章(转载)的时候发现了有些对象的方法是分可枚举性和不可枚举性的.简单的查了一下资料,今天来捋一捋啥是对象的可枚举啥是不可枚举. 可枚举性: 对象的每一个属性都有一个描述对象,用来描述和控制该 ... 
- 关于Javascript中通过实例对象修改原型对象属性值的问题
		Javascript中的数据值有两大类:基本类型的数据值和引用类型的数据值. 基本类型的数据值有5种:null.undefined.number.boolean和string. 引用类型的数据值往大的 ... 
- 在C#中如何读取枚举值的描述属性
		在C#中,有时候我们需要读取枚举值的描述属性,也就是说这个枚举值代表了什么意思.比如本文中枚举值 Chinese ,我们希望知道它代表意思的说明(即“中文”). 有下面的枚举: 1 2 3 4 5 6 ... 
- sort方法实际应用详解---javascript中对一个对象数组按照对象某个属性进行排序
		转载: 查看原文 在javascript中,对象和数组是两种不同的类型,这和php中的数组概念不同.在javascript中,也有一些精妙的算法,用来对一些对象进行排序.我在面试迅雷的时候,也拿到一道 ... 
- javascript中字符串对象常用的方法和属性
		前言 字符串是一种非常重要的数据类型,在Java等面向对象编程语言中,它代表对象类型,而在javascript中它却是一种基本数据类型,在开发的领域中,我们经常会碰到,无论是前端还是后台.比如后台验证 ... 
- JavaScript 中那些关于坐标和距离的属性与方法
		一 前言 在前端开发中总会遇到各种各样需要使用或计算坐标和距离的情况,但是这些属性和方法众多,全部熟练地记下来并非是一件易事,大多只能现查,耗费不少时间精力,于是便有了整理记录的想法,即加深了印象,又 ... 
随机推荐
- iOS LZMA类压缩算法使用
			LZMA(Lempel-Ziv-Markov chain-Algorithm的缩写)是2001年以来得到发展的一个数据压缩算法,它用于7-Zip归档工具中的7z格式和 Unix-like 下的 xz ... 
- UISegmentedControl字体大小,颜色,选中颜色,左边椭圆,右边直线的Button 解决之iOS开发之分段控制器UISegmentedControl
			NSArray *segmentedArray = [NSArrayarrayWithObjects:STR(@"Mynews"),STR(@"Systemmes ... 
- OpenFlow技术白皮书-V1.0
			1. 概述 OpenFlow是由斯坦福大学的Nick McKeown教授在2008年4月ACM Communications Review上发表的一篇论文OpenFlow: enabling inn ... 
- 让svn具有分布式的功能。
			最近开发遇到了个难事.公司的svn库不能随便提交,必须要经过验证.但是平时修改太多,如果不提交到svn说不定前面被删掉的代码后面又需要了.svn自带的relocate和switch都不能达到要求.找遍 ... 
- BZOJ2154 Crash的数字表格 【莫比乌斯反演】
			BZOJ2154 Crash的数字表格 Description 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b) ... 
- BZOJ3196 Tyvj1730 二逼平衡树 【树套树】 【线段树套treap】
			BZOJ3196 Tyvj1730 二逼平衡树 Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 1.查询k在区间内的排名 2.查询区间内排名 ... 
- python环境搭建-Linux系统下python2.7升级python3.5.2步骤
			首先Python 查看版本 , 在Linux下特别注意权限问题,创建目录时候切记给予权限 如果是 ubnutu 请使用首先切换到 sudo su , 否则 make install 会出现问题.. 升 ... 
- 后缀数组模板/LCP模板
			//后缀数组模板,MANX为数组的大小 //支持的操作有计算后缀数组(sa数组), 计算相邻两元素的最长公共前缀(height数组),使用get_height(); //计算两个后缀a, 和b的最长公 ... 
- __all__  作用,  相当于导入*
			它是一个string元素组成的list变量,定义了当你使用 from <module> import * 导入某个模块的时候能导出的符号(这里代表变量,函数,类等) 参考文章: http: ... 
- java之反射概述
			类加载器和反射 类加载器: 1 类的加载过程: 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载.连接.初始化三步骤来实现对这个类进行初始化. 加载:就是指将class文件读入内存 ... 
