浅谈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 相关文章推荐
基于Asp.net与Javascript控制的日期控件
May 22 Javascript
Js(JavaScript)中,弹出是或否的选择框示例(confirm用法的实例分析)
Jul 09 Javascript
js导出table数据到excel即导出为EXCEL文档的方法
Oct 10 Javascript
ie8本地图片上传预览示例代码
Jan 12 Javascript
js控制iframe的高度/宽度让其自适应内容
Apr 09 Javascript
jQuery CSS()方法改变现有的CSS样式
Aug 20 Javascript
Vue AST源码解析第一篇
Jul 19 Javascript
bootstrap响应式工具使用详解
Nov 29 Javascript
基于vue2.x的电商图片放大镜插件的使用
Jan 22 Javascript
jQuery中的类名选择器(.class)用法简单示例
May 14 jQuery
基于vue实现滚动条滚动到指定位置对应位置数字进行tween特效
Apr 18 Javascript
vue中destroyed方法的使用说明
Jul 21 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常用函数的用法详解
2013/05/10 PHP
php版小黄鸡simsimi聊天机器人接口分享
2014/01/26 PHP
php无限极分类递归排序实现方法
2014/11/11 PHP
PHP实现的简单mock json脚本分享
2015/02/10 PHP
php导出生成word的方法
2015/12/25 PHP
thinkPHP自动验证、自动添加及表单错误问题分析
2016/10/17 PHP
PHP两种实现无级递归分类的方法
2017/03/02 PHP
JQuery对class属性的操作实现按钮开关效果
2013/10/11 Javascript
jQuery中 prop() attr()使用详解
2015/05/19 Javascript
在JavaScript中操作时间之getYear()方法的使用教程
2015/06/11 Javascript
Angular.Js中ng-include指令的使用与实现
2017/05/07 Javascript
Underscore之Array_动力节点Java学院整理
2017/07/10 Javascript
以v-model与promise两种方式实现vue弹窗组件
2018/05/21 Javascript
ES6 如何改变JS内置行为的代理与反射
2019/02/11 Javascript
在Vue项目中使用snapshot测试的具体使用
2019/04/16 Javascript
使用vue2.6实现抖音【时间轮盘】屏保效果附源码
2019/04/24 Javascript
Python升级提示Tkinter模块找不到的解决方法
2014/08/22 Python
Python3.5编程实现修改IIS WEB.CONFIG的方法示例
2017/08/18 Python
Django中的Signal代码详解
2018/02/05 Python
用Django实现一个可运行的区块链应用
2018/03/08 Python
Django 日志配置按日期滚动的方法
2019/01/31 Python
详解python方法之绑定方法与非绑定方法
2020/08/17 Python
深入解析HTML5 Canvas控制图形矩阵变换的方法
2016/03/24 HTML / CSS
Betsey Johnson官网:妖娆可爱的连衣裙及鞋子、手袋和配件
2016/12/30 全球购物
美国购买和销售礼品卡平台:Raise
2017/01/13 全球购物
de Bijenkorf比利时官网:荷兰最知名的百货商店
2017/06/29 全球购物
台湾团购、宅配和优惠券:17Life
2017/08/14 全球购物
英国最好的包装供应商:Priory Direct
2019/12/17 全球购物
MIXIT官网:俄罗斯最大的化妆品公司之一
2020/01/25 全球购物
细节决定成败演讲稿
2014/05/12 职场文书
信电学院毕业生自荐书
2014/05/24 职场文书
学雷锋活动倡议书
2014/08/30 职场文书
工作总结与自我评价
2014/09/18 职场文书
领导班子整改方案和个人整改措施
2014/10/25 职场文书
2015新教师教学工作总结
2015/07/22 职场文书
少先队大队委竞选口号
2015/12/25 职场文书