<JavaScript>可枚举属性与不可枚举属性
在JavaScript中,对象的属性分为可枚举和不可枚举之分,它们是由属性的enumerable值决定的。可枚举性决定了这个属性能否被for…in查找遍历到。
一、怎么判断属性是否可枚举
js中基本包装类型的原型属性是不可枚举的,如Object, Array, Number等,如果你写出这样的代码遍历其中的属性:
|
1
2
3
4
|
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对象:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
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”的不可枚举属性
接下来做以下验证:
1.
|
1
2
3
|
for(var pro in kxy) { console.log("kxy." + pro + " = " + kxy[pro]); } |
遍历结果:

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

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

此方法也只能读取对象本身的可枚举属性,并序列化为JSON对象。
<JavaScript>可枚举属性与不可枚举属性的更多相关文章
- JavaScript中的可枚举属性与不可枚举属性
在JavaScript中,对象的属性分为可枚举和不可枚举之分,它们是由属性的enumerable值决定的.可枚举性决定了这个属性能否被for…in查找遍历到. 一.怎么判断属性是否可枚举 js中基本包 ...
- JS中的可枚举属性与不可枚举属性以及扩展
在JavaScript中,对象的属性分为可枚举和不可枚举之分,它们是由属性的enumerable值决定的.可枚举性决定了这个属性能否被for…in查找遍历到. 一.怎么判断属性是否可枚举 js中基本包 ...
- js中的可枚举属性与不可枚举属性
在JavaScript中,对象的属性分为可枚举和不可枚举之分,它们是由属性的enumerable值决定的.可枚举性决定了这个属性能否被for…in查找遍历到. 一.怎么判断属性是否可枚举 js中基本包 ...
- JS对象的可枚举属性和不可枚举属性
昨天在写文章(转载)的时候发现了有些对象的方法是分可枚举性和不可枚举性的.简单的查了一下资料,今天来捋一捋啥是对象的可枚举啥是不可枚举. 可枚举性: 对象的每一个属性都有一个描述对象,用来描述和控制该 ...
- JavaScript可枚举的属性
/* 把P中的可枚举属性复制到o中,并返回o中 如果o和p中含有同名的属性,则覆盖O中的属性 这个函数并不处理getter和setter以及复制属性 */ function extend(o,p){ ...
- [转] JavaScript中的属性:如何遍历属性
在JavaScript中,遍历一个对象的属性往往没有在其他语言中遍历一个哈希(有些语言称为字典)的键那么简单.这主要有两个方面的原因:一个是,JavaScript中的对象通常都处在某个原型链中,它会从 ...
- 【转载】JavaScript中的属性:如何遍历属性
转载自:http://www.cnblogs.com/ziyunfei/archive/2012/11/03/2752905.html 在JavaScript中,遍历一个对象的属性往往没有在其他语言中 ...
- JavaScript中的对象描述符(属性特性)
我们先创建一个对象: var person = { name: "Nicholas", _job: "Software Engineer", sayName: ...
- JavaScript中四种不同的属性检测方式比较
JavaScript中四种不同的属性检测方式比较 1. 用in方法 var o = {x:1}; "x" in o; //true "y" in o; //fa ...
随机推荐
- 5.管道 Pipe
/*管道(Pipe)*/ Java NIO 管道是 /*2 个线程*/ 之间的 /*单向*/数据连接 Pipe 有一个 source 通道 和 一个 sink 通道.数据会被写到 sink 通道,从s ...
- MySQL数据库的基本认识与操作
Mysql是一个数据库,但是我们安装的mysql数据库服务,服务就会有状态,启动,停止,重启.我们使用mysql必须保证mysql启动. 使用mysql数据库需要连接数据库 Mysql -u -p - ...
- Octave(数据绘制)
>> t=[:0.01:0.98]; >> y1 = sin(*pi**t); >> plot(t,y1); >> y2 = cos(*pi**t); ...
- 个人作业-Alpha项目测试—luomei1547
这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/ 这个作业要求在哪里 https://edu.cnbl ...
- 谷歌网页性能分析工具 Lighthouse 的安装及使用
github地址:https://github.com/GoogleChrome/lighthouse 一.如果可以翻墙的话可以从 chrome 扩展插件里直接安装. 二.下面是另一种使用方法:基于 ...
- WCF之WebService
一.Web Services简介 Web Services是支持客户端与服务器通过网络互操作的一种软件系统,是一组可以通过网络调用的应用程序API.在Web Services中主要到SOAP/UDDI ...
- asp.net mvc(模式)和三层架构(BLL、DAL、Model)的联系与区别 转载自:http://blog.csdn.net/luoyeyu1989/article/details/8275866
首先,MVC和三层架构,是不一样的. 三层架构中,DAL(数据访问层).BLL(业务逻辑层).WEB层各司其职,意在职责分离. MVC是 Model-View-Controller,严格说这三个加起来 ...
- 简单的JAVAWeb选课系统
该系统管理员可以添加和删除学生.教师,教师可以修改自己信息.添加课程.浏览自己课程,学生可以修改自己的信息.选课.浏览全部课程. 首先展示文件: 然后就是一次展示代码: Guanli包中代码: pac ...
- pycharm 头模板
#!/usr/local/bin/python3 # -*- coding: utf-8 -*- """ @author: Ray @contact: raylively ...
- 005_linuxC++之_指针的引入
(一)直接看代码 #include <iostream> using namespace std; int add(int a){ a = a + ; return a; } int ad ...