浅谈JavaScript中的属性:如何遍历属性


Posted in Javascript onSeptember 14, 2017

在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等
})()

以上这篇浅谈JavaScript中的属性:如何遍历属性就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery修改属性值实例代码(设置属性值)
Jan 06 Javascript
json的定义、标准格式及json字符串检验
May 11 Javascript
教你用jquery实现iframe自适应高度
Jun 11 Javascript
jQuery设置和获取HTML、文本和值示例
Jul 08 Javascript
JavaScript 作用域链解析
Nov 13 Javascript
jQuery.holdReady()方法用法实例
Dec 27 Javascript
XMLHttpRequest Level 2 使用指南
Aug 26 Javascript
基于jQuery实现文字打印动态效果
Apr 21 jQuery
Node.js中流(stream)的使用方法示例
Jul 16 Javascript
jQuery幻灯片插件owlcarousel参数说明中文文档
Feb 27 jQuery
jQuery动态生成的元素绑定事件操作实例分析
May 04 jQuery
将RGB值转换为灰度值的简单算法
Oct 09 Javascript
基于node.js express mvc轻量级框架实践
Sep 14 #Javascript
gulp教程_从入门到项目中快速上手使用方法
Sep 14 #Javascript
利用jsonp与代理服务器方案解决跨域问题
Sep 14 #Javascript
基于js中document.cookie全面解析
Sep 14 #Javascript
基于Vue过渡状态实例讲解
Sep 14 #Javascript
JavaScript使用atan2来绘制箭头和曲线的实例
Sep 14 #Javascript
Vue2.0基于vue-cli+webpack同级组件之间的通信教程(推荐)
Sep 14 #Javascript
You might like
PHP使用Pear发送邮件(Windows环境)
2016/01/05 PHP
thinkphp验证码的实现(form、ajax实现验证)
2016/07/28 PHP
PHP基于接口技术实现简单的多态应用完整实例
2017/04/26 PHP
小试JQuery的AutoComplete插件
2011/05/04 Javascript
JavaScript高级程序设计 阅读笔记(二十) js错误处理
2012/08/14 Javascript
js检测判断日期大于多少天的方法
2015/05/04 Javascript
AngularJS中如何使用$http对MongoLab数据表进行增删改查
2016/01/23 Javascript
在JavaScript中对HTML进行反转义详解
2016/05/18 Javascript
Node.js连接MongoDB数据库产生的问题
2017/02/08 Javascript
前端开发之CSS原理详解
2017/03/11 Javascript
vue2.0的contextmenu右键弹出菜单的实例代码
2017/07/24 Javascript
seajs中最常用的7个功能、配置示例
2017/10/10 Javascript
Vue.js 表单控件操作小结
2018/03/29 Javascript
nodejs初始化init的示例代码
2018/10/10 NodeJs
NodeJs 文件系统操作模块fs使用方法详解
2018/11/26 NodeJs
Vue之Mixins(混入)的使用方法
2019/09/24 Javascript
[42:23]完美世界DOTA2联赛PWL S3 Forest vs Rebirth 第二场 12.10
2020/12/13 DOTA
使用pdb模块调试Python程序实例
2015/06/02 Python
Flask之请求钩子的实现
2018/12/23 Python
Python 实现交换矩阵的行示例
2019/06/26 Python
Django中Middleware中的函数详解
2019/07/18 Python
关于Python3 类方法、静态方法新解
2019/08/30 Python
python实现大量图片重命名
2020/03/23 Python
Django之form组件自动校验数据实现
2020/01/14 Python
浅谈Python3多线程之间的执行顺序问题
2020/05/02 Python
Python爬虫小例子——爬取51job发布的工作职位
2020/07/10 Python
python实现图像高斯金字塔的示例代码
2020/12/11 Python
荷兰超市:DEEN
2018/03/14 全球购物
制衣厂各岗位职责
2013/12/02 职场文书
集体备课反思
2014/02/12 职场文书
机械操作工岗位职责
2014/08/08 职场文书
大学新生军训自我鉴定
2014/09/18 职场文书
领导干部作风建设总结
2014/10/23 职场文书
工作表扬信范文
2015/01/17 职场文书
教学反思怎么写
2016/02/24 职场文书
python非标准时间的转换
2021/07/25 Python