ES6入门系列 ----- 对象的遍历
工作中遍历对象是家常便饭了,遍历数组的方法五花八门, 然而很多小伙伴是不是和我之前一样只会用for ...in....
来遍历对象呢, 今天给大家介绍五种遍历对象属性的方法:
- 1, 最常用的for in
- 它可以便利对象本身及其继承自原型上的可枚举属性,
- 过滤掉原型上的属性可以用hasOwnProperty(属性名)来判断是否是本身的属性,
- 对象的每一个属性都有它的描述,可以用Object.getOwnPropertyDescriptors(对象, 属性名)来查看对象的某个属性的描述,可以知道其是否是可枚举, 可写,可配置
- 2, Object.keys(obj)
- 是不是有点眼熟,和数组的keys方法很像, 返回一个数组
- 这个数组包含自身的所有可枚举属性,不包含原型链上的属性以及Symbol属性
- 这个数组是可迭代的,也就是部署了iterator接口,可以用for...of遍历
- 3, Object.getOwnPropertyNames(obj)
- 返回一个数组
- 包含自身的所有属性,包括不可枚举的属性,但不包括Symbol属性
- 4 Object.getOwnPropertySymbols(obj)
- 返回一个数组
- 包含自身的所有Symbol属性
- 5 Reflect.ownKeys(obj)
- 返回一个数组
- 一般不会用, 包含自身的所有属性, 不管是否为Symbol属性, 也不管是否可枚举
插播 : Symbol 是 es6 新增的一种基本数据类型, es5的基本数据有5种, 所以新增后有6种基本数据类型
在Symbol出现之前,对象的属性名只能为字符串, 容易造成属性名冲突, 而Symbol 是独一无二的,
所以用Symbol 作为属性名一定不会冲突。
格式 const s = Symbol() , 切记前面不用加new, 因为new 操作符会返回一个对象,而Symbol是
原始值。Symbol() === Symbol() // false.
拓展题: typeof 1234n = ?
ES6入门系列 ----- 对象的遍历的更多相关文章
- es6 快速入门 系列 —— 对象
其他章节请看: es6 快速入门 系列 对象 试图解决的问题 写法繁杂 属性初始值需要重复写 function createPeople(name, age){ // name 和 age 都写了 2 ...
- ES6入门系列二(数值的扩展)
ES6 在 Number对象上新增了很多方法 1 . Number.isFinite()判断是否为有限的数字 和全局的isFinite() 方法的区别是 isFinite('1') === tr ...
- ES6入门系列 ----- Reflect
Reflect 是ES6 为了操作对象而提供的新的API, 目的是: 将Object 上一些明显属于语言内部的方法,比如 Object.defineProperty 放到 Reflect对象上 ...
- ES6入门系列三(特性总览下)
0.导言 最近从coffee切换到js,代码量一下子变大了不少,也多了些许陌生感.为了在JS代码中,更合理的使用ES6的新特性,特在此对ES6的特性做一个简单的总览. 1.模块(Module) --C ...
- ES6 入门系列 - 函数的扩展
1函数参数的默认值 基本用法 在ES6之前,不能直接为函数的参数指定默认值,只能采用变通的方法. function log(x, y) { y = y || 'World'; console.log( ...
- ES6入门系列四(测试题分析)
0.导言 ES6中新增了不少的新特性,来点测试题热热身.具体题目来源请看:http://perfectionkills.com/javascript-quiz-es6/. 以下将一题一题来解析what ...
- ES6入门系列一(基础)
1.let命令 Tips: 块级作用域(只在当前块中有效) 不会变量提升(必须先申明在使用) 让变量独占该块,不再受外部影响 不允许重复声明 总之:let更像我们熟知的静态语言的的变量声明指令 ES6 ...
- ES6 入门系列 - let 和 const 命令
let命令 基本用法 ES6新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效. { let a = ; ; } a // ReferenceEr ...
- ES6入门之对象扩展
ES5对象(超类)原有: 属性:construct构造函数 方法: object.hasOwnProperty( propertyName ) //检测是否有一个本地的属性而不是继承的,返回boole ...
随机推荐
- linux (07) redis详解
一.redis持久化RDB 1.在配置文件中添加参数,开启rdb功能 redis.conf 写入 port 6379 daemonize yes logfile /data/6379/redis.lo ...
- 继承c3,网络编程,相互通信
继承: 面向对象多继承,a先找左,再找右 py2中有经典类,新式类,py3中只有新式类 py2中用ascii 编译 py3中用unicode 编译 py2: 经典类 新式类:如果自己或自己的前辈继承o ...
- 201871010105-曹玉中《面向对象程序设计(java)》第十周学习总结
201871010105-曹玉中<面向对象程序设计(java)>第十周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这 ...
- MySQL数据库的下载与安装
1.百度:MySQL,点击MySQL官网 2. 进入官网后,点击DOWNLOADS,然后点击Windows 3.点击MySQL Installer 4.下载第二个MSI文佳,点击downloads 5 ...
- Eclipse的server选项卡中找不到tomcat配置项
1.在Eclipse中,如果想开发j2ee,必须要先安装插件.至于具体的插件安装方法,这里不再赘述. 2.当进行到配置tomcat服务器的时候,有时候会出现这种情况: 3.在server选项卡的Run ...
- redis 在 windows 中的安装
redis 在 windows 中的安装 redis 官方并没有提供 redis 的 windows 版本.但是微软提供了 redis 的 windows 版本.有2.8和3.0版本.3.0版本支持集 ...
- Apex API 请求
Salesforce与网络服务的通信 在Salesforce中可以利用Apex类与远程站点的网络服务进行通信.当远程网络服务支持REST方法时,开发者可以利用Apex代码进行数据的操作. 设置远程站点 ...
- MyEclipse一直building workspace
点击Project,点击Bulid Automatically去掉其前面的勾,即取消自动编译工作空间中的所有java文件. 注:不要取消!!!!取消之后如果你修改的java文件和struts.xml等 ...
- 11/11 <Topological Sort> 207
207. Course Schedule 我们定义二维数组 graph 来表示这个有向图,一维数组 in 来表示每个顶点的入度.我们开始先根据输入来建立这个有向图,并将入度数组也初始化好.然后我们定义 ...
- 面试:Semaphore(信号量)的成长之路
2019最寒冷,面试跳槽不能等 马上就3月份了,所谓的金三银四招聘季.2019年也许是互联网最冷清的一年,很多知名的大型互联网公司都裁员过冬.当然也有一些公司还在持续招人的,比如阿里就宣称不裁员,反而 ...