js对象方法大全

252 阅读3分钟

一、Object.assign(目标对象,源对象)

浅复制、合并、拷贝、

通过复制一个或多个对象来创建一个新的对象。

继承属性和不可枚举的属性是不能被拷贝的

将所有源对象的所有属性复制到目标对象上,并且返回目标对象

不能复制不可枚举属性

var o=Object.assign({},obj,obj1);

var o ={...obj,...obj1}//复制,重新变成1个新对象

二、Object.keys(o)

获取o对象自身可枚举属性名称的所有key组成的数组

let obj = {
    name:'张三',
    age:18
};
let keys = Object.keys(obj);
console.log(keys); // 结果 ['name', 'age']

三、Object.values(o)

获取o对象自身可枚举值的所有value组成的数组

let obj = {
    name:'张三',
    age:18
};
let values = Object.values(obj);
console.log(values); // 结果 ['张三', 18]

四、Object.entries(o)

返回给定对象自身可枚举属性的[key, value]数组

let obj = {
    name:'张三',
    age:18
};
let kv = Object.entries(obj);
console.log(kv); // 结果 [['name', '张三'], ['age', 18]] 

五、Object.is()

判断两个值是否相同,所有 NaN 值都相等(这与==和===不同)

如果下列任何一项成立,则两个值相同:

  1. 两个值都是 undefined
  2. 两个值都是 null
  3. 两个值都是 true 或者都是 false
  4. 两个值是由相同个数的字符按照相同的顺序组成的字符串
  5. 两个值指向同一个对象
  6. 两个值都是数字并且
  7. 都是正零 +0
  8. 都是负零 -0
  9. 都是 NaN
  10. 都是除零和 NaN 外的其它同一个数字
Object.is({}, {})// false
+0 === -0 //true
NaN === NaN // false
Object.is(+0, -0) // false
Object.is(NaN, NaN) // true

六、Object.fromEntries

Object.entries的反向操作,把array转换为object 。
该方法可以把键值对列表转化为一个对象,入参可以是一个Map、Set、Array类型,或者其他实现了可迭代协议的可迭代对象。

let obj = {
    name:'张三',
    age:18
};
let kv = Object.entries(obj);
let ko = Object.fromEntries(kv);
console.log(kv); // 结果 [['name', '张三'], ['age', 18]]
console.log(ko); // 结果 {name: '张三', age: 18}

七、delete 删除对象的属性

let obj = {
    name:'张三',
    age:18,
    sex:'男'
};
let del1 = delete obj.sex;
let del2 = delete obj.aaa;
console.log(del1); // 结果 true 执行删除操作,删除对应的属性名,执行后返回true
console.log(del2); // 结果 true 无论对象内部是否有对应的属性名,执行后都返回true
console.log(obj); // 结果 {name: '张三', age: 18}

八、 Object.defineProperty(对象,属性名,属性描述对象);

**Object.defineProperty()** 方法会直接在一个对象上定义一个新属性(可以定义Symbol类型),或者修改一个对象的现有属性,并返回此对象。

let obj = {
    name:'张三',
    sex:'男'
};
Object.defineProperty(obj,'age',{
    configurable: true, // 是否可以删除, 默认为 false
    enumerable: true, // 是否可以枚举, 默认为 false
    value: 18, // 赋值, 默认为 undefined
})
console.log(obj); // 结果 {name: '张三', sex: '男', age: 18}
console.log(obj.age); // 结果 18

九、Object.create()

使用指定的原型对象和属性创建一个新对象。

十、Object.defineProperties()

给对象添加多个属性并分别指定它们的配置。

十一、Object.freeze()

冻结对象:其他代码不能删除或更改任何属性。

十二、Object.isExtensible()

判断对象是否可扩展。

十三、Object.isFrozen()

判断对象是否已经冻结。

十四、Object.isSealed()

判断对象是否已经密封。

十五、Object.getOwnPropertyNames(obj)

获取对象的所有属性名,返回属性名组成的数组,Symbol不能获取

十六、Object.getOwnPropertySymbols(obj)

获取对象的所有Symbol属性名,返回属性名组成的数组

十七、Object.getOwnPropertyDescriptor(obj,"d")

获取属性的描述对象

十八、Reflect.deleteProperty(obj,"c")

删除对象属性

十九、 Object.seal(obj)

可以修改,不能删除,不能添加属性

二十、 Object.preventExtensions(obj)

可以修改,可以删除,但是不能添加新属性,不能扩展

二十一、Object.getOwnPropertyDescriptors(obj)

获取对象中所有属性的描述对象列表对象

二十二、Object.getPrototypeOf(obj)

获取obj对象的原型链

二十三、Object.setPrototypeOf(o1,o)

设置对象的原型链

二十四、 判断对象的对象属性是否包含这个属性名

console.log(o1.hasOwnProperty("b"))

console.log(Object.hasOwn(o1,"b"))