JavaScript中,`Object` 是一个内置对象,它有各种方法,可以用来操作对象。下面是一些常见的 `Object` 方法:
1. `Object.keys(obj)`: 返回一个包含`obj`对象所有可枚举属性名称的数组。
const obj = { a: 1, b: 2, c: 3 };
const keys = Object.keys(obj);
console.log(keys); // ['a', 'b', 'c']
2. `Object.values(obj)`: 返回一个包含`obj`对象所有可枚举属性值的数组。
const obj = { a: 1, b: 2, c: 3 };
const values = Object.values(obj);
console.log(values); // [1, 2, 3]
3. `Object.entries(obj)`: 返回一个包含`[key, value]`数组的迭代器,其中`key`是`obj`对象的属性名称,`value`是相应的属性值。
const obj = { a: 1, b: 2, c: 3 };
const entries = Object.entries(obj);
console.log(entries); // [['a', 1], ['b', 2], ['c', 3]]
4. `Object.assign(target, ...sources)`: 用于将源对象(`source`)的所有可枚举属性复制到目标对象(`target`)中,并返回目标对象。
const target = { a: 1, b: 2 };
const source = { b: 3, c: 4 };
const result = Object.assign(target, source);
console.log(result); // { a: 1, b: 3, c: 4 }
5. `Object.create(proto, [propertiesObject])`: 基于给定的原型对象创建一个新对象,并可选地为该对象添加新属性。
const person = {
name: '',
age: 0,
greeting() {
console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
},
};
const john = Object.create(person);
john.name = 'John';
john.age = 20;
john.greeting(); // Hello, my name is John and I am 20 years old.
6. `Object.defineProperties(obj, props)`: 定义一个或多个新属性,或修改现有属性,然后通过`Object.defineProperty()`将它们添加到一个对象上。
const obj = {};
Object.defineProperty(obj, 'foo', {
value: 'bar',
writable: false, // 不可写
enumerable: true, // 可枚举
configurable: false, // 不可配置
});
console.log(obj.foo); // 'bar'
obj.foo = 'baz'; // 抛出 TypeError
7. `Object.defineProperty(obj, prop, descriptor)`: 为对象定义一个新属性,或修改现有属性的值。
const obj = {};
Object.defineProperties(obj, {
foo: {
value: 'bar',
writable: false,
},
baz: {
value: 42,
writable: true,
},
});
console.log(obj.foo); // 'bar'
console.log(obj.baz); // 42
8. `Object.freeze(obj)`: 冻结一个对象,使其不能够被修改。
const obj = { a: 1, b: 2 };
Object.freeze(obj);
obj.c = 3; // 抛出 TypeError
9. `Object.is(value1, value2)`: 判断两个值是否相同。
console.log(Object.is(NaN, NaN)); // true
console.log(Object.is(+0, -0)); // false
console.log(Object.is({}, {})); // false
console.log(Object.is(true, true)); // true
10. `Object.seal(obj)`: 封闭一个对象,使其不能够添加新属性,并将现有属性设置为不可配置。
const obj = { a: 1 };
Object.seal(obj);
obj.b = 2; // 不会添加新属性
delete obj.a; // 不可删除现有属性
obj.a = 3; // 不可配置现有属性
这些方法只是 `Object` 中可用方法的一小部分,还有很多其他的方法可以在开发中使用。需要注意的是,并非所有的 `Object` 方法都支持所有的 JavaScript 引擎,所以在使用时应该注意浏览器的兼容性。