实用的 JavaScript 对象内置方法
在 JavaScript 中,对象是一种特殊的数据结构,可以用来存储不同类型的元素。
作为我们开发人员使用最频繁的数据结构之一,本文介绍一些你可能不太了解但又非常实用的对象内置方法,帮助你提升开发效率,快速完成数据处理。
Object.keys(obj)
描述:返回一个包含给定对象所有可枚举属性名称的数组。
用法:
1
2
3const myObject = { a: 1, b: 2, c: 3 };
const keysArray = Object.keys(myObject);
console.log(keysArray); // 输出: ['a', 'b', 'c']
Object.values(obj)
描述:返回一个包含给定对象所有可枚举属性值的数组。
用法:
1
2
3const myObject = { a: 1, b: 2, c: 3 };
const valuesArray = Object.values(myObject);
console.log(valuesArray); // 输出: [1, 2, 3]
Object.entries(obj)
描述:返回一个包含给定对象所有可枚举属性的键值对数组。
用法:
1
2
3const myObject = { a: 1, b: 2, c: 3 };
const entriesArray = Object.entries(myObject);
console.log(entriesArray); // 输出: [['a', 1], ['b', 2], ['c', 3]]
Object.assign(target, source1, source2, …)
描述:将一个或多个源对象的属性复制到目标对象中。
用法:
1
2
3
4
5
6const targetObject = { a: 1, b: 2 };
const sourceObject = { b: 3, c: 4 };
const mergedObject = Object.assign(targetObject, sourceObject);
console.log(mergedObject); // 输出: { a: 1, b: 3, c: 4 }
// 等同于 { ...targetObject, ...sourceObject }
Object.freeze(obj)
描述:冻结一个对象,使其属性不可修改。
用法:
1
2
3
4const myObject = { a: 1, b: 2 };
Object.freeze(myObject);
myObject.a = 100; // 不会报错,但不会修改成功
console.log(myObject); // 输出: { a: 1, b: 2 }
Object.seal(obj)
描述:密封一个对象,阻止添加新属性并将所有现有属性标记为不可配置。
用法:
1
2
3
4
5const myObject = { a: 1, b: 2 };
Object.seal(myObject);
myObject.c = 3; // 不会报错,但不会添加新属性
delete myObject.a; // 不会报错,但不会删除属性
console.log(myObject); // 输出: { a: 1, b: 2 }
Object.hasOwnProperty(prop)
描述:返回一个布尔值,指示对象是否具有指定属性。
用法:
1
2
3const myObject = { a: 1, b: 2, c: 3 };
console.log(myObject.hasOwnProperty('b')); // 输出:true
console.log(myObject.hasOwnProperty('d')); // 输出:false
Object.hasOwn(obj, prop)
描述:返回一个布尔值,判断对象是否具有指定属性。(跟 Object.hasOwnProperty() 作用一致)
用法:
1
2
3const myObject = { a: 1, b: 2, c: 3 };
console.log(Object.hasOwn(myObject, 'a')); // 输出:true
console.log(Object.hasOwn(myObject, 'd')); // 输出:false
Object.getOwnPropertyDescriptor(obj, prop)
描述:返回一个对象,该对象描述了给定对象上指定属性的配置。
用法:
1
2
3
4const myObject = { a: 1, b: 2 };
const propertyDescriptor = Object.getOwnPropertyDescriptor(myObject, 'a');
console.log(propertyDescriptor);
// 输出: { value: 1, writable: true, enumerable: true, configurable: true }
Object.defineProperties(obj, props)
描述:定义或修改对象的多个属性。
用法:
1
2
3
4
5
6const myObject = {};
Object.defineProperties(myObject, {
a: { value: 1, writable: true },
b: { value: 2, writable: false },
});
console.log(myObject); // 输出: { a: 1, b: 2 }
Object.getPrototypeOf(obj)
描述:返回指定对象的原型。
用法:
1
2
3const myObject = {};
const prototype = Object.getPrototypeOf(myObject);
console.log(prototype); // 输出:{}
Object.setPrototypeOf(obj, prototype)
描述:设置对象的原型(即修改对象的
[[Prototype]]
内部属性)。用法:
1
2
3
4const myObject = {};
const newPrototype = { a: 1 };
Object.setPrototypeOf(myObject, newPrototype);
console.log(myObject.a); // 输出:1
Object.getOwnPropertySymbols(obj)
描述:返回一个数组,包含给定对象自身的所有符号属性。
用法:
1
2
3
4const mySymbol = Symbol('mySymbol');
const myObject = { a: 1, [mySymbol]: 'symbol' };
const symbolProperties = Object.getOwnPropertySymbols(myObject);
console.log(symbolProperties); // 输出:[Symbol(mySymbol)]
Object.is(obj1, obj2)
描述:比较两个值是否相同,类似于
===
运算符用法:
1
2console.log(Object.is(1, 1)); // 输出:true
console.log(Object.is({}, {})); // 输出:false,不同的引用
Comments
Comment plugin failed to load
Loading comment plugin