浅谈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插件实现鼠标经过图片右侧显示大图的效果(类似淘宝)
Feb 04 Javascript
由浅入深讲解Javascript继承机制与simple-inheritance源码分析
Dec 13 Javascript
jQuery插件easyUI实现通过JS显示Dialog的方法
Sep 16 Javascript
Vue 2.0 服务端渲染入门介绍
Mar 29 Javascript
bootstrap栅格系统示例代码分享
May 22 Javascript
vue mixins组件复用的几种方式(小结)
Sep 06 Javascript
如何使node也支持从url加载一个module详解
Jun 05 Javascript
vuejs+element UI点击编辑表格某一行时获取内容填入表单的示例
Oct 31 Javascript
Angular(5.2->6.1)升级小结
Dec 27 Javascript
浅谈关于vue中scss公用的解决方案
Dec 02 Javascript
关于JavaScript中异步/等待的用法与理解
Nov 18 Javascript
JS指定音频audio在某个时间点进行播放
Nov 28 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
第五节 克隆 [5]
2006/10/09 PHP
MYSQL环境变量设置方法
2007/01/15 PHP
修改了一个很不错的php验证码(支持中文)
2007/02/14 PHP
不用mod_rewrite直接用php实现伪静态化页面代码
2008/10/04 PHP
php实现源代码加密的方法
2015/07/11 PHP
php 中的信号处理操作实例详解
2020/03/04 PHP
javascript打开新窗口同时关闭旧窗口
2009/01/16 Javascript
JS在IE和FireFox之间常用函数的区别小结
2010/03/12 Javascript
web基于浏览器的本地存储方法应用
2012/11/27 Javascript
JS选中checkbox后获取table内一行TD所有数据的方法
2015/07/01 Javascript
jQuery EasyUI基础教程之EasyUI常用组件(推荐)
2016/07/15 Javascript
浅谈angularjs $http提交数据探索
2017/01/20 Javascript
微信小程序之GET请求的实例详解
2017/09/29 Javascript
vue实现裁切图片同时实现放大、缩小、旋转功能
2018/03/02 Javascript
nodejs简单访问及操作mysql数据库的方法示例
2018/03/15 NodeJs
vue.js项目nginx部署教程
2018/04/05 Javascript
在HTML文档中嵌入JavaScript的四种方法
2018/05/07 Javascript
vue动态路由配置及路由传参的方式
2018/05/23 Javascript
对vue中methods互相调用的方法详解
2018/08/30 Javascript
express框架中使用jwt实现验证的方法
2019/08/25 Javascript
layui弹出框Tab选项卡的示例代码
2019/09/04 Javascript
原生JavaScript实现拖动校验功能
2020/09/29 Javascript
[40:17]2018DOTA2亚洲邀请赛 4.5 淘汰赛 LGD vs Liquid 第一场
2018/04/06 DOTA
wxPython学习之主框架实例
2014/09/28 Python
Python创建对称矩阵的方法示例【基于numpy模块】
2017/10/12 Python
对python中的try、except、finally 执行顺序详解
2019/02/18 Python
python实现LBP方法提取图像纹理特征实现分类的步骤
2019/07/11 Python
使用Matplotlib 绘制精美的数学图形例子
2019/12/13 Python
python的Jenkins接口调用方式
2020/05/12 Python
Python collections模块的使用方法
2020/10/09 Python
Jo Malone美国官网:祖玛珑香水
2017/03/27 全球购物
英国在线自行车店:Merlin Cycles
2018/08/20 全球购物
代办委托书怎样写
2014/04/08 职场文书
国贸专业毕业求职信
2014/06/11 职场文书
环境科学专业求职信
2014/08/04 职场文书
小学教育见习报告
2014/10/31 职场文书