鲜荣彬
Herry

(一)属性的遍历

    首先,我们使用 class 新增建一个对象

class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }

  toString() {
    return '姓名' + this.name + ',年龄 ' + this.age + ')';
  }
}

 

  ES6中一共有五种遍历对象属性的方法。

  (1) for....in

    循环遍历自身和继承的可枚举属性,不包含Symbol属性。

  (2)Object.keys(obj) 

    返回一个数组,包含自身(不含继承)的可枚举属性,不包含Symol属性。

   (3)Object.getOwnPropertyNames(obj)

    返回一个数组,包含自身的所有属性(含不可枚举属性),不包含Symbol属性。

   (4)Object.getOwnPropertySymbols(obj)

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

   (5)Reflect.ownKeys(obj)

     返回一个数组,包含自身的所有属性(包括自身属性、可枚举,不可枚举,Symbol属性)。

   以上五种遍历对象的属性,都遵守同样的属性遍历规则:

    数值属性 (按照数字排序) ==》 字符串属性 (按照生成时间 排序) ==》Symbol 属性(按照生成时间 排序)

         

(二) about Prototype

    (1) __proto__ 属性

    用来获取或设置对象的 prototype 对象,在实现上,__proto__ 调用的是 Object.prototype.__proto__ 。

    由于其前后的双下划线,说明它本质上是一个内部属性。

    标准规定,只有浏览器必须部署这个属性,其他运行环境不一定需要部署。

    ES6中 建议使用 Object.setPrototypeOf 与 Object.getPrototypeOf 代替。

  Reflect.getPrototypeOf = function(target) {};
  Reflect.set = function(target,propertyKey,value,receiver) {};

用法如下:

          

(三)  Object.values() 与 Object.entries()

  ES5 引入了Object.keys() 方法,ES7 中又新增了 Object.values() 与 Object.entries() 两个新方法。

  Object.values()   返回对象自身(不含继承)的所有可遍历属性的   值。

  Object.entries()   返回一个数组,成员是 自身的(不含继承的)所有可以遍历属性的 键对 数组。

  

    如果其参数不是对象,会将其转换为对象。

    Object.values('jack');  ==>["j", "a", "c", "k"]
    Object.values(12);      ==>[ ]  
      Object.values(true);    ==>[ ]     

  Object.entries() 的基本用途

   (一) 遍历对象的属性

   (二) 将对象转换为真正的 Map 解构。   

let person={ name:'jack',age:42 };

let map=new Map(Object.entries(person));

==>   Map {"name" => "jack", "age" => 42}

 

(四)ES7 对象的扩展运算符

   (1) Rest解析赋值

     对象的Rest结构赋值 用于 从一个对象取值,相对于将 可遍历的、但尚未读取的属性,

     分配到指定的对象上面,所有的键和它们的值,都会拷贝到新对象上面。

 

     注意: 1、 A { x,y,..z}=B ,其中 B  必须是一个对象,如果 B = undefined ||  null ,就会报错。

         2、要求 结构赋值 的  参数,必须放在参数 是最后一位。

         3、此拷贝是浅拷贝,即如果 B 中的值发生了改变,A 中的值也会被修改。

    

    let o1 = { a: 1 };
    let o2 = { b: 2 };
    o2.__proto__ = o1;

    function getTT(...arg){
        return arg;
    }
    let o3 = getTT(o2);

 

    

 

posted on 2017-09-02 16:28  Herry彬  阅读(118)  评论(0)    收藏  举报