ES6中觉得比较特别简洁的写法,可以直接写入变量和函数

var foo = 'bar';
var baz = {foo};
baz // {foo: "bar"}

// 等同于
var baz = {foo: foo};

function f(x, y) {
  return {x, y};
}

// 等同于

function f(x, y) {
  return {x: x, y: y};
}


Object的方法
Object.is():
用来比较两个值是否严格相等,与严格比较运算符(===)的行为基本一致。

Object.assign()
用于对象的合并,将源对象的所有课枚举属性复制到目标对象。
这个方法是浅拷贝,不是深拷贝
这个也可以用来处理数组,但是会把数组视为对象

Object.assign([1, 2, 3], [4, 5])//// [4, 5, 3]

他的基本用法是

  1. 给对象添加属性

  2. 为对象添加方法

  3. 克隆对象

  4. 合并多个对象

  5. 为属性指定默认值

属性的可枚举性
Object.getOwnPropertyDescriptor: 这个方法可以用来获取该属性的描述对象。
属性的遍历
1.for..in 遍历对象自身的和可继承的可枚举属性(不含Symbol属性)
2.Object.keys(obj),返回一个数组,包括对象自身的(不含继承的)所有课枚举属性(不含Symbol属性)
3.Object.getOwnPropertyNames(obj):返回一个数组,包含对象自身的所有属性(不含Symbol,但是包括不可枚举属性)
4.Object.getOwnPropertySymbols(obj),返回一个数组,包含对象自身的所有Symbol属性
5.Reflect.ownKeys(obj): 返回一个数组,包含对象自身的所有属性,不管是属性名是Symbol或者字符串,也不管是否可枚举

这5中方法都遍历对象的属性,都遵从同样的属性遍历的次序规则

  • 首先遍历所有属性名为数值的属性,按照数字排序

  • 其次遍历所有属性名为字符串的属性,按照生成时间排序

  • 最后遍历属性名为Symbol值的属性,按照生成时间排序

Object.getPrototypeOf()
Object.keys()
Object.values()
Object.entries(): 返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历属性的键值对数组

var obj = { foo: 'bar', baz: 42 };
Object.entries(obj)
// [ ["foo", "bar"], ["baz", 42] ]

对象的扩展运算符的应用

1.解构赋值

const [a, ...b] = [1, 2, 3];
a // 1
b // [2, 3]

let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 };
x // 1
y // 2
z // { a: 3, b: 4 }

2.遍历对象的所有可遍历属性

let z = { a: 3, b: 4 };
let n = { ...z };
n // { a: 3, b: 4 }

let ab = { ...a, ...b };
// 等同于
let ab = Object.assign({}, a, b);

Object.getOwnPropertyDescriptors()
ES5中有一个Object.getOwnPropertyDescriptor,返回某个对象属性的描述对象,而getOwnPropertyDescriptors返回指定对象所有自身属性(非继承属性)的描述对象。

//TODO: Object的所有方法整理es5新增的方法
// 扩展运算符的整理


jyren_Rachel
107 声望4 粉丝