ECMAScript 6 -- 对象(1)

130 阅读1分钟

原文:ECMAScript 6 -- 对象的新增方法

1. Object.is()

Object.is() 用来比较两个值是否完全相等
=== 不同的是 Object.is() 作比较时 -0 不等于 +0NaN 等于自身

Object.is('foo', 'foo'); // true
Object.is({}, {}); // false

Object.is(-0, +0); // false
Object.is(NaN, NaN); //true

2. Object.assign()

Object.assign() 用于合并对象,第一个参数是目标对象(target),后面的参数都是源对象(source) 如果目标对象和源对象或源对象之间有同名属性,后面的属性会覆盖前面的属性 Object.assign() 只拷贝源对象的自身属性(不拷贝继承属性),不拷贝不可枚举属性

const target = { a = 1, b = 2 };
const source1 = { b= 3, c = 4 };
const source2 = { c = 5 };

Object.assign(target, source1, source2);
console.log(target); // { a = 1, b = 3, c = 5 }

参数不是对象,会先转为对象

typeof Object.assign(2) // "object"

参数是 undefinednull

  • 如果是目标对象,会报错
Object.assign(undefined) // Erro
Object.assign(null) // Erro
  • 如果是源对象,会跳过
Object.assign(obj, undefined) === obj  // true
Object.assign(obj, null) === obj  // true

源对象是数值或布尔值,会被忽略 源对象是字符串,会被以数组形式拷贝到目标对象

const v1 = 'abc';
const v2 = true;
const v3 = 7;

const obj = Object.assign({}, v1, v2, v3);
console.log(obj)  // {'0': 'a', '1': 'b', '2': 'c'}

未完待续...