浅谈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 text()要注意啦
Oct 30 Javascript
javascript中数组中求最大值示例代码
Dec 18 Javascript
js分页代码分享
Apr 28 Javascript
Highcharts入门之简介
Aug 02 Javascript
原生JS实现幻灯片
Feb 22 Javascript
jQuery常用选择器详解
Jul 17 jQuery
JavaScript函数中的this四种绑定形式
Aug 15 Javascript
vue组件学习教程
Sep 09 Javascript
JavaScript实现与使用发布/订阅模式详解
Jan 19 Javascript
JS实现的合并两个有序链表算法示例
Feb 25 Javascript
详解Vue3 Composition API中的提取和重用逻辑
Apr 29 Javascript
解决vue elementUI 使用el-select 时 change事件的触发问题
Nov 17 Vue.js
基于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 木马攻击防御技巧
2009/06/13 PHP
php文件打包 下载之使用PHP自带的ZipArchive压缩文件并下载打包好的文件
2012/06/13 PHP
PHP判断是否有Get参数的方法
2014/05/05 PHP
使用PHPStorm+XDebug搭建单步调试环境
2017/11/19 PHP
js中单引号与双引号冲突问题解决方法
2013/10/04 Javascript
jquery做的一个简单的屏幕锁定提示框
2014/03/26 Javascript
node.js中的fs.mkdir方法使用说明
2014/12/17 Javascript
JavaScript实现三阶幻方算法谜题解答
2014/12/29 Javascript
Jquery使用val方法读写value值
2015/05/18 Javascript
JavaScript中eval()函数用法详解
2015/12/14 Javascript
微信小程序 数据封装,参数传值等经验分享
2017/01/09 Javascript
Vue数据驱动模拟实现5
2017/01/13 Javascript
jQuery获取Table某列的值(推荐)
2017/03/03 Javascript
Vue全局loading及错误提示的思路与实现
2019/08/09 Javascript
vue图片加载失败时用默认图片替换的方法
2019/08/29 Javascript
11个并不被常用但对开发非常有帮助的Python库
2015/03/31 Python
Python装饰器实现几类验证功能做法实例
2017/05/18 Python
tensorflow实现KNN识别MNIST
2018/03/12 Python
python tornado微信开发入门代码
2018/08/24 Python
在python Numpy中求向量和矩阵的范数实例
2019/08/26 Python
python3.8下载及安装步骤详解
2020/01/15 Python
python global和nonlocal用法解析
2020/02/03 Python
Python包和模块的分发详细介绍
2020/06/19 Python
零基础学Python之前需要学c语言吗
2020/07/21 Python
通俗讲解python 装饰器
2020/09/07 Python
Python grpc超时机制代码示例
2020/09/14 Python
如何利用CSS3制作3D效果文字具体实现样式
2013/05/02 HTML / CSS
单身旅行者的单身假期:Just You
2018/04/08 全球购物
Europcar美国/加拿大:预订汽车或卡车租赁服务
2018/11/13 全球购物
七一表彰活动方案
2014/01/18 职场文书
学校安全责任书
2014/04/14 职场文书
试用期员工工作自我评价
2014/09/10 职场文书
傲慢与偏见读书笔记
2015/06/29 职场文书
文明礼貌主题班会
2015/08/14 职场文书
《爬天都峰》教学反思
2016/02/23 职场文书
一篇文章看懂MySQL主从复制与读写分离
2021/11/07 MySQL