浅谈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 相关文章推荐
JS 遮照层实现代码
Mar 31 Javascript
jquery mobile动态添加元素之后不能正确渲染解决方法说明
Mar 05 Javascript
JavaScript遍历table表格中的某行某列并打印其值
Jul 08 Javascript
JS回调函数的应用简单实例
Sep 17 Javascript
js中数组排序sort方法的原理分析
Nov 20 Javascript
jquery配合.NET实现点击指定绑定数据并且能够一键下载
Oct 28 Javascript
AngularJS 应用身份认证的技巧总结
Nov 07 Javascript
javascript实现延时显示提示框效果
Jun 01 Javascript
VUE长按事件需求详解
Oct 18 Javascript
Node.js中,在cmd界面,进入退出Node.js运行环境的方法
May 12 Javascript
详解node字体压缩插件font-spider的用法
Sep 28 Javascript
vue中使用腾讯云Im的示例
Oct 23 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程序员的13个好习惯小结
2012/02/20 PHP
PHP常用算法和数据结构示例(必看篇)
2017/03/15 PHP
php学习笔记之mb_strstr的基本使用
2018/02/03 PHP
jquery 获取json数据实现代码
2009/04/27 Javascript
Jquery中dialog属性小记
2010/09/03 Javascript
JavaScript使用IEEE 标准进行二进制浮点运算产生莫名错误的解决方法
2011/05/28 Javascript
javascript中this做事件参数相关问题解答
2013/03/17 Javascript
在JavaScript里嵌入大量字符串常量的实现方法
2013/07/07 Javascript
jQuery简易图片放大特效示例代码
2014/06/09 Javascript
JavaScript的Date()方法使用详解
2015/06/09 Javascript
jQuery Timelinr实现垂直水平时间轴插件(附源码下载)
2016/02/16 Javascript
微信小程序实现皮肤功能(夜间模式)
2017/06/18 Javascript
Vue自定义指令详解
2017/07/28 Javascript
Django使用多数据库的方法
2017/09/06 Javascript
Vue.js 2.0和Cordova开发webApp环境搭建方法
2018/02/26 Javascript
前端使用crypto.js进行加密的函数代码
2020/08/16 Javascript
vue 解决在微信内置浏览器中调用支付宝支付的情况
2020/11/09 Javascript
[46:47]2014 DOTA2国际邀请赛中国区预选赛5.21 LGD-CDEC VS NE
2014/05/22 DOTA
python实现支付宝当面付(扫码支付)功能
2018/05/30 Python
实例讲解Python3中abs()函数
2019/02/19 Python
python实现给微信指定好友定时发送消息
2019/04/29 Python
Ubuntu中配置TensorFlow使用环境的方法
2020/04/21 Python
python+playwright微软自动化工具的使用
2021/02/02 Python
html5的websockets全双工通信详解学习示例
2014/02/26 HTML / CSS
关于解决iframe标签嵌套问题的解决方法
2020/03/04 HTML / CSS
C#公司笔试题
2014/03/28 面试题
质量安全标语
2014/06/07 职场文书
禁止酒驾标语
2014/06/25 职场文书
纪律教育学习心得体会
2014/09/02 职场文书
优秀团队申报材料
2014/12/26 职场文书
研讨会致辞
2015/07/31 职场文书
网络营销实训总结
2015/08/03 职场文书
基于CSS3画一个iPhone
2021/04/21 HTML / CSS
python调试工具Birdseye的使用教程
2021/05/25 Python
解决vue自定义组件@click点击失效问题
2022/04/30 Vue.js
windows server2012 R2下安装PaddleOCR服务的的详细步骤
2022/09/23 Servers