浅谈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 相关文章推荐
form表单中去掉默认的enter键提交并绑定js方法实现代码
Apr 01 Javascript
Js控制滑轮左右滑动实例
Feb 13 Javascript
老生常谈onBlur事件与onfocus事件(js)
Jul 09 Javascript
JS及JQuery对Html内容编码,Html转义
Feb 17 Javascript
js中DOM三级列表(代码分享)
Mar 20 Javascript
JS组件系列之MVVM组件 vue 30分钟搞定前端增删改查
Apr 28 Javascript
webstorm添加vue.js支持的方法教程
Jul 05 Javascript
JS实现弹出下载对话框及常见文件类型的下载
Jul 13 Javascript
集合Bootstrap自定义confirm提示效果
Sep 19 Javascript
vue.js项目中实用的小技巧汇总
Nov 29 Javascript
浅析Vue中method与computed的区别
Mar 06 Javascript
浅谈JavaScript闭包
Apr 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 各种应用乱码问题的解决方法
2010/05/09 PHP
php变量范围介绍
2012/10/15 PHP
php去除换行符的方法小结(PHP_EOL变量的使用)
2013/02/16 PHP
TP5框架实现的数据库备份功能示例
2020/04/05 PHP
IE8对JS通过属性和数组遍历解析不一样的地方探讨
2013/05/06 Javascript
JS操作Cookies的小例子
2013/10/15 Javascript
百度移动版的url编码解码示例
2014/04/29 Javascript
JavaScript中实现PHP的打乱数组函数shuffle实例
2014/10/11 Javascript
javascript动态创建表格及添加数据实例详解
2015/05/13 Javascript
jQuery往textarea中光标所在位置插入文本的方法
2015/06/26 Javascript
jquery网页日历显示控件calendar3.1使用详解
2016/11/24 Javascript
Bootstrap基本插件学习笔记之按钮(21)
2016/12/08 Javascript
JavaScript实现水平进度条拖拽效果
2017/01/18 Javascript
JavaScript正则表达式函数总结(常用)
2018/02/22 Javascript
js replace 全局替换的操作方法
2018/06/12 Javascript
vue19 组建 Vue.extend component、组件模版、动态组件 的实例代码
2019/04/04 Javascript
详解Vue中组件的缓存
2019/04/20 Javascript
手把手教你使用TypeScript开发Node.js应用
2019/05/06 Javascript
微信小程序scroll-view点击项自动居中效果的实现
2020/03/25 Javascript
uni-app如何页面传参数的几种方法总结
2020/04/28 Javascript
[55:44]OG vs NAVI 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python中输出ASCII大文字、艺术字、字符字小技巧
2015/04/28 Python
深入理解python对json的操作总结
2017/01/05 Python
python编程实现希尔排序
2017/04/13 Python
python 日志增量抓取实现方法
2018/04/28 Python
python 画出使用分类器得到的决策边界
2019/08/21 Python
Python pip 安装与使用(安装、更新、删除)
2019/10/06 Python
Python使用matplotlib 画矩形的三种方式分析
2019/10/31 Python
Python 中判断列表是否为空的方法
2019/11/24 Python
python图形开发GUI库pyqt5的详细使用方法及各控件的属性与方法
2020/02/14 Python
Python作用域与名字空间原理详解
2020/03/21 Python
Html5嵌入钉钉的实现示例
2020/06/04 HTML / CSS
加拿大领先的优质厨具产品在线购物网站:Golda’s Kitchen
2017/11/17 全球购物
2014年幼儿园元旦活动方案
2014/02/13 职场文书
大学生在校表现评语
2014/12/31 职场文书
公司联欢会主持词
2015/07/04 职场文书