ES6|ES6 对象 (Object) 新增方法
1. is()
- 作用:
Object.is(obj1, obj2)
用来比较两个值是否严格相等,与严格比较运算符(===)的行为基本一致,但在 +0 和 -0 以及NaN比较上有区别
5 == 5;
// true
5 === 5;
// true
Object.is(5, 5);
// true5 == “5”;
// true
5 === “5”;
// false
Object.is(5, “5”);
// false+0 == -0;
// true
+0 === -0;
// true
Object.is(+0, -0);
// falseNaN == NaN;
// false
NaN === NaN;
// false
Object.is(NaN, NaN);
// true
2. assign()
- 作用:
Object.assign(target, ...source)
用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象,其中源对象可以有多个。如果出现多个重名属性,后面的属性将覆盖前面的属性。
function s1() {}
s1.prototype = {
constructor: s1,
n: “s1”,
value: 4,
obj: {value: 1}
};
const s2 = { value: 8 };
const target = { value: 16};
Object.assign(target, s1, s2);
console.log(target.n);
// s1
console.log(target.value);
// 8
console.log(target.obj.value);
// 1s1.obj.value = https://www.it610.com/article/2;
console.log(target.obj.value);
// 2
需要注意的是,由于
Object.assign()
方法实行的是浅拷贝,而不是深拷贝,如果源对象某个属性的值是对象,那么目标对象拷贝得到的是这个对象的引用。上面例子中,如果改变 s1.obj.value 的值, target.obj.value 也会随之改变。3. setPrototypeOf(), getPrototypeof()
-
setPrototypeOf(object, prototype)
作用:ES6 正式推荐的设置原型对象的方法,返回参数本身对象。
let obj = {};
let porto = {value: 1};
Object.setPrototypeOf(obj, porto);
obj.value =https://www.it610.com/article/== 1;
// true
如果第一个参数不是一个对象,则会自动转换成一个对象。但是由于返回还是第一个参数,所以不会有任何效果。
Object.setPrototypeOf(1, {}) === 1;
// true
Object.setPrototypeOf(‘str’, {}) === ‘str’;
// true
Object.setPrototypeOf(true, {}) === true;
// true
【ES6|ES6 对象 (Object) 新增方法】但是由于 undefined 以及 null 无法被转换成一个对象,所以会报错。
Object.setPrototypeOf(undefined, {});
// 报错
Object.setPrototypeOf(null, {});
// 报错
-
getPrototypeOf(obj)
作用:用于读取一个对象的原型对象。
function func() {/* */}
const rec = new func();
Object.getPrototypeOf(rec) === func.prototype;
// trueObject.setPrototypeOf(rec, Object.prototype);
Object.getPrototypeOf(rec) === func.prototype;
// false
如果参数不是对象,会被自动转为对象。
Object.getPrototypeOf(1);
// Number {[[PrimitiveValue]]: 0}
Object.getPrototypeOf('str');
// String {length: 0, [[PrimitiveValue]]: ""}
Object.getPrototypeOf(true);
// Boolean {[[PrimitiveValue]]: false}Object.getPrototypeOf(1) === Number.prototype;
// true
Object.getPrototypeOf('foo') === String.prototype;
// true
Object.getPrototypeOf(true) === Boolean.prototype;
// true
如果参数是 undefined 或 null,它们无法转为对象,所以会报错。
Object.getPrototypeOf(null);
// TypeError
Object.getPrototypeOf(undefined);
// TypeError
4. keys(), values(), entries()
-
keys(object)
作用:返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键名。
const obj = { str: “bar”, value: 42 };
Object.keys(obj);
// [“str”, “value”]
-
values(object)
作用:返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键值。
const obj = { str: “bar”, value: 42 };
Object.values(obj);
// [“bar”, 42]
-
entries(object)
作用:返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键值对数组。
const obj = { str: “bar”, value: 42 };
Object.entries(obj);
// [[“str”, “bar”], [“value”, 42]]
6. fromEntries()
作用:用于将一个键值对数组转为对象。
const entries = new Map([
[‘str’, ‘bar’],
[‘value’, 42]
]);
Object.fromEntries(entries);
// { str: “bar”, value: 42 }
推荐阅读
- EffectiveObjective-C2.0|EffectiveObjective-C2.0 笔记 - 第二部分
- (二)ES6第一节变量(let|(二)ES6第一节变量(let,const)
- 六步搭建ES6语法环境
- 数组常用方法一
- jQuery插件
- iOS面试题--基础
- 口红选得好,对象不愁找......
- performSelectorOnMainThread:withObject:waitUntilDone:参数设置为NO或YES的区别
- java静态代理模式
- Python-类和对象