1 Object.freeze() 阻止修改现有属性的特性和值,并阻止添加新属性
let obj={}
obj.sex='男'
Object.freeze(obj)
obj.sex='女'
console.log(obj.sex) //男 修改属性无效
2 Object.assign(target,source1,source2) 该方法用于对象合并,将源对象source的所有可枚举属性合并到目标对象上,此方法只拷贝源对象的自身属性,不拷贝继承属性。
Object.assign 方法实行的是浅拷贝,而不是深拷贝。也就是说,如果源对象某个属性的值是对象,那么目标对象拷贝得到的这个对象的引用。同名属性会替换
Object.assign只能进行值的复制,如果要复制的值是一个取值函数,那么将求值后再复制。
Object.assign可以用来处理数组,但是会把数组视为对象。
Object.assign([1, 2, 3], [4, 5]) //[4, 5, 3]
let target = {
age: 10,
page: 1
};
let objA = {
age: 12,
year: 20,
newObj: {
sex: '男'
}
};
Object.assign(target, objA);
console.log(target, '拷贝之后')
// {
// age:12,
// newObj: {
// sex: '女'
// },
// page: 1
// year: 20,
// }
//拷贝之后
// 同名属性会被覆盖
3 Object.is() 判断两个值是否相等,如果下列任何一项成立,则两个值相同
两个值都是undefined
两个值都是null
两个值都是true或者事false
两个值是由相同个数的字符串或相同的顺序组成的字符串
两个值指向同一个对象
两个值都是数字 都是—+0 -0 都是NaN
Object.is([], []); //false
Object.is(-0, -0); //true
4 Object.keys(obj) 返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和使用 for…in 循环遍历该对象时返回的顺序一致 (两者的主要区别是 一个 for-in 循环还会枚举其原型链上的属性)。
l
let arr = ["a", "b", "c"];
console.log(Object.keys(arr)); //["0", "1", "2"]
/* Object 对象 */
let obj = {
age: 20,
sex: '男'
},
keys = Object.keys(obj); //["age", "sex"]
values = Object.values(obj); //[20, 男]
Object.values('foo') //['f', 'o','o']
5 Object.values()方法返回一个给定对象自己的所有可枚举属性值的数组,值的顺序与使用for…in循环的顺序相同 ( 区别在于 for-in 循环枚举原型链中的属性 )。
字符串会先转成一个类似数组的对象。字符串的每个字符,就是该对象的一个属性。因此,Object.values返回每个属性的键值,就是各个字符组成的一个数组。
6 Object.entries() 方法返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键值对数组(二维数组)。
const obj={foo:'bar',baz:'234'}. //[ foor,bar] [baz,234]
7 Object.hasOwnProperty()方法
判断对象自身属性中是否具有指定的属性 ,这个方法不包括判断在对象原型链上的方法
var obj = { name:'fei'}
console.log(obj.hasOwnProperty('name'))//true
console.log(obj.hasOwnProperty('toString'))//false
8 Object.getOwnPropertyNames()方法
Object.getOwnPropertyNames()方法返回对象的所有自身属性的属性名(包括不可枚举的属性)组成的数组,但不会获取原型链上的属性。