浅谈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 相关文章推荐
兼容ie和firefox js关闭代码
Dec 11 Javascript
jquery的ajax从纯真网(cz88.net)获取IP地址对应地区名
Dec 02 Javascript
JavaScript利用构造函数和原型的方式模拟C#类的功能
Mar 06 Javascript
js实现字符串的16进制编码不加密
Apr 25 Javascript
js delete 用法(删除对象属性及变量)
Aug 24 Javascript
Javascript 拖拽雏形(逐行分析代码,让你轻松了拖拽的原理)
Jan 23 Javascript
jQuery匹配文档链接并添加class的方法
Jun 26 Javascript
利用jquery实现实时更新歌词的方法
Jan 06 Javascript
Node.js安装配置图文教程
May 10 Javascript
jQuery zTree树插件动态加载实例代码
May 11 jQuery
vue iview组件表格 render函数的使用方法详解
Mar 15 Javascript
vue 实现全选全不选的示例代码
Mar 29 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
利用递归把多维数组转为一维数组的函数
2006/10/09 PHP
php simplexmlElement操作xml的命名空间实现代码
2011/01/04 PHP
PHP怎么实现网站保存快捷方式方便用户随时浏览
2013/08/15 PHP
CodeIgniter删除和设置Cookie的方法
2015/04/07 PHP
PHP版本的选择5.2.17 5.3.27 5.3.28 5.4 5.5兼容性问题分析
2016/04/04 PHP
php实现的mongoDB单例模式操作类
2018/01/20 PHP
PHP中抽象类,接口功能、定义方法示例
2019/02/26 PHP
鼠标图片振动代码
2006/07/06 Javascript
使用正则替换变量
2007/05/05 Javascript
基于jQuery的动态增删改查表格信息,可左键/右键提示(原创自Zjmainstay)
2012/07/31 Javascript
javascript中的括号()用法小结
2014/04/14 Javascript
JS实现带缓冲效果打开、关闭、移动一个层的方法
2015/05/09 Javascript
四种参数传递的形式——URL,超链接,js,form表单
2015/07/24 Javascript
JavaScript 最佳实践:帮你提升代码质量
2016/12/03 Javascript
jQuery中的deferred对象和extend方法详解
2017/05/08 jQuery
详谈for循环里面的break和continue语句
2017/07/20 Javascript
vue.js通过路由实现经典的三栏布局实例代码
2018/07/08 Javascript
详解Vue中watch的详细用法
2018/11/28 Javascript
jQuery实现点击旋转,再点击恢复初始状态动画效果示例
2018/12/11 jQuery
详解Vue依赖收集引发的问题
2019/04/22 Javascript
vue中js判断长时间不操作界面自动退出登录(推荐)
2020/01/22 Javascript
JS实现百度搜索框关键字推荐
2020/02/17 Javascript
Python常用字符串替换函数strip、replace及sub用法示例
2018/05/21 Python
Python自定义一个类实现字典dict功能的方法
2019/01/19 Python
利用ctypes获取numpy数组的指针方法
2019/02/12 Python
Django通过dwebsocket实现websocket的例子
2019/11/15 Python
5行Python代码实现图像分割的步骤详解
2020/05/25 Python
Python如何实现邮件功能
2020/05/27 Python
Python中random模块常用方法的使用教程
2020/10/04 Python
解决Python import .pyd 可能遇到路径的问题
2021/03/04 Python
修复iPhone的safari浏览器上submit按钮圆角bug
2012/12/24 HTML / CSS
TripAdvisor瑞典:全球领先的旅游网站
2017/12/11 全球购物
文秘个人求职信范文
2014/04/22 职场文书
代理人委托书
2014/08/01 职场文书
党支部四风整改方案
2014/10/25 职场文书
Nginx图片服务器配置之后图片访问404的问题解决
2022/03/21 Servers