1,Object.assign()
用于多个对象的复制,返回修改后的对象。若一个对象为空的话,那就是浅拷贝。
第一个参数作为目标对象,是将后面一个对象参数,合并到前面一个对象参数。
如果有相同的属性,后面的会对前面的进行覆盖。
const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };
const returnedTarget = Object.assign(target, source);
console.log(target);
// expected output: Object { a: 1, b: 4, c: 5 }
console.log(returnedTarget);
// expected output: Object { a: 1, b: 4, c: 5 }
2,Object.create()
用于创建一个新的对象,使用现有参数作为新创建对象的原型。
const person = {
isHuman: false,
printIntroduction: function() {
console.log(`My name is ${this.name}. Am I human? ${this.isHuman}`);
}
};
const me = Object.create(person);
me.name = 'jjj' // 可以添加属性,在创建的对象上面。
me.isHuman = true// 可以修改person带的属性
me.printIntroduction() // 可以执行方法
3,Object.defineProperties()
Object.defineProperties() 方法直接在一个对象上定义新的属性或修改现有属性,并返回该对象。
Object.defineProperties(obj, props)
obj: 在其上定义或修改属性的对象。
props:
- value: 属性的值
- writable:当且仅当该属性的 writable 键值为 true 时,属性的值,也就是上面的value,才能被=改变。 默认为 false。
- get:作为该属性的 getter 函数,如果没有 getter则为undefined。函数返回值将被用作属性的值。
- set:作为属性的 setter 函数,如果没有 setter,则为undefined。函数将仅接受参数赋值给该属性的新值。 默认为 undefined
- configurable: 当且仅当该属性的 configurable 键值为 true 时,该属性的描述符才能够被改变, 默认为 false
- enumerable:当且仅当该属性的 enumerable 键值为 true 时,该属性才会出现在对象的枚举属性中。 默认为 false。
var obj = {};
Object.defineProperties(obj, {
'property1': {
value: true,
writable: true
},
'property2': {
value: 'Hello',
writable: false
}
// etc. etc.
});
4,Object.defineProperty()
Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。和上面类似,只是上面的方法可以一次创建多个属性,这个方法只能创建一个属性。
Object.defineProperty(obj,prop,descriptor)
const object1 = {};
Object.defineProperty(object1, 'property1', {
value: 42,
writable: false
});
5,Object.prototype.hasOwnProperty()
hasOwnProperty() 方法会返回一个布尔值,指示对象自身属性中是否具有指定的属性(也就是,是否有指定的键)。
常常的使用方式,就是和for in搭配使用,for in会遍历可枚举属性,原型上的属性也会遍历,因此可以用hasOwnProperty()这个方法来判断,当前属性是否是元素自身的属性。
for (var name in buz) {
if (buz.hasOwnProperty(name)) {
console.log('this is fog (' +
name + ') for sure. Value: ' + buz[name]);
}
else {
console.log(name); // toString or something else
}
}
6, Object.keys()
Object.keys() 方法会返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和正常循环遍历该对象时返回的顺序一致。
var arr = ['a', 'b', 'c'];
console.log(Object.keys(arr)); // console: ['0', '1', '2']
常常在Map对象中使用。
7,Object.values()
Object.values()方法返回一个给定对象自身的所有可枚举属性值的数组,值的顺序与使用for…in循环的顺序相同 ( 区别在于 for-in 循环枚举原型链中的属性 )。
var obj = { foo: 'bar', baz: 42 };
console.log(Object.values(obj)); // ['bar', 42]
7,Object.prototype.toString()
toString() 方法返回一个表示该对象的字符串。
每个对象都有一个 toString() 方法,当该对象被表示为一个文本值时,或者一个对象以预期的字符串方式引用时自动调用。
默认情况下,toString() 方法被每个 Object 对象继承。
如果此方法在自定义对象中未被覆盖,toString() 返回 “[object type]”,其中 type 是对象的类型。
比如:
var o = new Object();
o.toString(); // 返回 [object Object]
可以在对象中重写toString方法
function Dog(name) {
this.name = name;
}
const dog1 = new Dog('Gabby');
Dog.prototype.toString = function dogToString() {
return `${this.name}`;
};
8,Object.is()
Object.is() 方法判断两个值是否为同一个值。
Object.is() 方法判断两个值是否为同一个值,如果满足以下任意条件则两个值相等:
都是 undefined
都是 null
都是 true 或都是 false
都是相同长度、相同字符、按相同顺序排列的字符串
都是相同对象(意味着都是同一个对象的值引用)
都是数字且
- 都是 +0
- 都是 -0
- 都是 NaN
- 都是同一个值,
- 非零且都不是 NaN
Object.is() 与 == 不同。== 运算符在判断相等前对两边的变量(如果它们不是同一类型)进行强制转换(这种行为将 “” == false 判断为 true),而 Object.is 不会强制转换两边的值。
Object.is() 与 === 也不相同。差别是它们对待有符号的零和 NaN 不同,例如,=== 运算符(也包括 == 运算符)将数字 -0 和 +0 视为相等,而将 Number.NaN 与 NaN 视为不相等。