博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript中的属性:如何遍历属性
阅读量:7047 次
发布时间:2019-06-28

本文共 1728 字,大约阅读时间需要 5 分钟。

在JavaScript中,遍历一个对象的属性往往没有在其他语言中遍历一个哈希(有些语言称为字典)的键那么简单.这主要有两个方面的原因:一个是,JavaScript中的对象通常都处在某个原型链中,它会从一个或多个的上层原型上继承一些属性.第二个原因是,JavaScript中的属性不光有值,它还有一些除了值以外的其他特性,其中一个影响属性遍历的特性就是[[Enumerable]],如果该值为true,则称这个属性是可枚举的,否则反之.

知道了这些,我们就可以把属性的遍历分为四种情况.

注:示例代码中,我们要遍历的对象是浏览器中的window,环境为Firefox 19,代码运行在空白页面中的script标签里.没有Firebug或者其他调试工具的影响(会导入一些全局变量,console等).

1.遍历可枚举的自身属性

可枚举的意思就是该属性的[[Enumerable]]特性为true,自身属性的意思就是该属性不是从原型链上继承下来的.

(function () { var propertys = Object.keys(window);    alert(propertys.length); //3  alert(propertys.join("\n")); //window,document,InstallTrigger,除了最后一个是火狐私有的属性,原来window对象只有两个可枚举的自身属性.window属性指向window对象自身,一般没什么用. })()

2.遍历所有的自身属性

特性为不可枚举的属性也并不是遍历不到,ES5给我们提供了getOwnPropertyNames方法,可以获取到一个对象的所有自身属性.

(function () { var propertys = Object.getOwnPropertyNames(window);    alert(propertys.length); //72 alert(propertys.join("\n")); //Object,Function,eval等等 })()

3.遍历可枚举的自身属性和继承属性

继承属性怎么遍历,你应该知道,就是最常用的for in遍历

(function () { var getEnumPropertyNames = function (obj) { var props = []; for (prop in obj) {            props.push(prop);        } return props;    } var propertys = getEnumPropertyNames(window);    alert(propertys.length); //185 alert(propertys.join("\n")); //addEventListener,onload等等 })()

4.遍历所有的自身属性和继承属性

这种遍历主要用在各种js调试工具的代码补全功能上.比如Firebug的.

(function () { var getAllPropertyNames = function (obj) { var props = []; do {            props = props.concat(Object.getOwnPropertyNames(obj));        } while (obj = Object.getPrototypeOf(obj)); return props;    } var propertys = getAllPropertyNames(window);    alert(propertys.length); //276 alert(propertys.join("\n")); //toString等 })()

转载:http://www.cnblogs.com/ziyunfei/archive/2012/11/03/2752905.html

转载于:https://my.oschina.net/wangdk/blog/167414

你可能感兴趣的文章
【51NOD-0】1137 矩阵乘法
查看>>
Android使用静默安装时碰见的问题
查看>>
MySQL单机多实例安装并配置主从复制
查看>>
awk调用shell命令的两种方法:system与print
查看>>
网络对抗技术 20164320 王浩 Exp 9 Web安全基础
查看>>
谷歌开源第二代机器学习系统 TensorFlow
查看>>
juqery模板 Templates
查看>>
eclipse 自动创建web.xml
查看>>
python 基础回顾2
查看>>
Servlet 示例
查看>>
十一.单表更新及多表更新
查看>>
poj 2773 Happy 2006
查看>>
设计模式(三)——结构型模式
查看>>
黑客与画家
查看>>
ThreadPoolExecutor详解
查看>>
Jenkins权限配置失误后导致登录失败的解决办法
查看>>
eclipse设置酷炫的代码颜色风格
查看>>
stm32 低功耗模式 学习总结
查看>>
太空飞行计划问题
查看>>
TAT
查看>>