ES6一共有5种方法可以遍历对象的属性。

(1)for...in

for...in循环遍历对象自身的和继承的可枚举属性(不含Symbol属性)。

(2)Object.keys(obj)

Object.keys返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含Symbol属性)。

(3)Object.getOwnPropertyNames(obj)

Object.getOwnPropertyNames返回一个数组,包含对象自身的所有属性(不含Symbol属性,但是包括不可枚举属性)。

(4)Object.getOwnPropertySymbols(obj)

Object.getOwnPropertySymbols返回一个数组,包含对象自身的所有Symbol属性。

(5)Reflect.ownKeys(obj)

Reflect.ownKeys返回一个数组,包含对象自身的所有属性,不管是属性名是Symbol或字符串,也不管是否可枚举。

///////Object.keys遍历属性/////////
let obj = {a:1, b:2,c:3};
Object.keys(obj); //["a", "b", "c"]返回对象属性数组

/////////Object.keys遍历value/////////
let obj = {a:1,b:2,c:function(){}};
Object.values(obj); //[1, 2, f]返回对象属性value值数组

///////Object.entries遍历键值对////////
let obj = {a:1,b:2,c:function(){}};
Object.entries(obj); ////[['a',1],['b', 2], ['c',f]返回对象键值对数组

///////Object.getOwnPropertyNames遍历属性(枚举+不可枚举)/////////
let obj = {a:1,b:2,c:function(){}};
Object.getOwnPropertyNames(obj); ////["a", "b", "c"]返回对象包括不可枚举的属性数组

以上的5种方法遍历对象的属性,都遵守同样的属性遍历的次序规则。

  • 首先遍历所有属性名为数值的属性,按照数字排序。
  • 其次遍历所有属性名为字符串的属性,按照生成时间排序。
  • 最后遍历所有属性名为Symbol值的属性,按照生成时间排序。
Reflect.ownKeys({ [Symbol()]:0, b:0, 10:0, 2:0, a:0 })
// ['2', '10', 'b', 'a', Symbol()]

上面代码中,Reflect.ownKeys方法返回一个数组,包含了参数对象的所有属性。这个数组的属性次序是这样的,首先是数值属性210,其次是字符串属性ba,最后是Symbol属性。

ES6学习--对象属性的遍历的更多相关文章

  1. ES6学习--对象属性的可枚举性( enumerable)

    可枚举性(enumerable)用来控制所描述的属性,是否将被包括在for...in循环之中.具体来说,如果一个属性的enumerable为false,下面三个操作不会取到该属性.* for..in循 ...

  2. ES6 之 对象属性的可枚举性和遍历

    1.Object.getOwnPropertyDescriptor() 解释:获取对对象属性的描述对象. let obj = { foo: 123 }; console.log(Object.getO ...

  3. JavaScript 对象属性的遍历

    ES6一共有5种方法可以遍历对象的属性. (1)for...in for...in循环遍历对象自身的和继承的可枚举属性(不含Symbol属性). (2)Object.keys(obj) Object. ...

  4. ES6学习笔记--属性名表达式

    1.直接用标识符作为属性名: obj.foo = true 2.用表达式作为属性名: obj['a'+'bc'] = 123 //相当于 obj['abc'] = 123 3.ES6 允许字面量定义对 ...

  5. ES6的对象属性简写

    在ES6中允许我们在设置一个对象的属性的时候不指定属性名. 不使用ES6: const name='Ming', age='18', city='Shanghai'; const student ={ ...

  6. 链式调用+对象属性与遍历+this指向+caller/callee

    之前的作业: 提示: 在开发的时候尽量在函数内部将作用都给调用好,在外部就能够直接使用 链式调用: 正常这样是不行的,因为没有具体返回值:  return 具体的对象,这样的才是链式操作,jquery ...

  7. Java 对象属性的遍历

    package com.cn.mybatis.test; import java.io.IOException; import java.io.InputStream; import java.lan ...

  8. ECMAScript5之JSON对象属性的遍历顺序

    测试浏览器 Chrome.Safari 一 键可以用parseInt解析成整数的,按数值升序顺序. var intObj = { '3.3' : 3.3, '2' : 222, '1' :111 } ...

  9. ES6学习笔记二:各种扩展

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/7242967.html 一:字符串扩展 1:字符串遍历器 for (let char of str) { // ...

随机推荐

  1. Exception in thread "main" java.lang.StackOverflowError

    总结:1.创建对象时,在父类构造方法new子类对象,这样会造成循环调用构造方法

  2. ELKStack可视化

    做一个可视化的视图 1,添加紧急联系人视图 2,添加统计单一数值的视图(添加Nginx请求数) 3,柱形图(统计访问最多的前几个IP) 4,新建仪表盘 5,新建搜索(Nginx404错误) 6,把建立 ...

  3. JAVA补充-抽象类

    1.抽象类基本概念 package com.neusoft.abstracted; /** * 抽象类:在class之前加abstract关键字 * 抽象方法语法: 修饰符 abstract 返回值类 ...

  4. 线程池和进程池的通用写法 ProcessPoolExecutor 和 ThreadPoolExecutor

    import time from comcurrent.futures import ThreadPoolExecutor,ProcessPoolExccoutor#这个方法可以用进程池或者线程池 d ...

  5. Spring 对JDBC操作的支持

    1.Spring 对JDBC操作的支持 Spring对jdbc技术提供了很好的支持,体现在: 1.Spring对c3p0连接池的支持很完善 2.Spring对jdbc提供了jdbcTemplate,来 ...

  6. Spacy 使用

    # 前提是必须安装: python -m spacy download ennlp = spacy.load('en')text = u"you are best. it is lemmat ...

  7. cordova 跨平台APP版本升级

    利用cordova+ionic开发好项目,之后就是打包发布,在这之前,还要做一个版本升级的小功能. 首先我们项目根目录里自然少不了配置:config.xml中 如图.version,我们以后每次升级A ...

  8. 软件工程-wordcount(C语言实现)

    Github项目地址:https://github.com/xiaobaot/wordcount-wc/tree/master WC 项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数 ...

  9. maven配置(myeclipse版)

    使用环境说明: OS:windows 7 64位 java version: "jdk1.8.0_66" IDE:myeclipse 2017 1.下载 下载地址:http://m ...

  10. requests库的get请求(加上head,加上get参数请求)

    #coding:utf-8 # 导入requests import requests # 构建url url = 'http://www.baidu.com' # 发送请求,获取响应 # respon ...