(一)属性的遍历
首先,我们使用 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);
浙公网安备 33010602011771号