
JavaScript 中Object的主要方法:
1.Object.assign(target,...sources)
功能:返回指定对象的原型对象。
示例:
const target = { a: 1, b: 2 };
const source = { b: 3, c: 4 };
Object.assign(target, source);
console.log(target);
// 输出: { a: 1, b: 3, c: 4 }
2.Object.create(proto[, propertiesObject])
功能:使用指定的原型对象(
proto
)和属性(可选的propertiesObject
)创建一个新对象。示例:
const proto = { greet: function() { console.log('Hello!'); } };
const newObj = Object.create(proto);
newObj.greet();
// 输出: Hello!
3.Object.defineProperty(obj, prop, descriptor)
功能:在一个对象(
obj
)上定义一个新属性(prop
),或者修改一个已经存在的属性,并且可以通过descriptor
对属性进行更精细的配置,如设置属性的可枚举性、可配置性和可写性等。示例:
const obj = {};
Object.defineProperty(obj, 'name', {
value: 'John',
writable: false,
enumerable: true,
configurable: true
});
4.Object.defineProperties(obj, props)
功能:直接在一个对象(
obj
)上定义多个新的属性或修改现有属性,props
是一个对象,它的键是要定义或修改的属性名,值是对应的属性描述符。示例:
const obj = {};
Object.defineProperties(obj, {
'name': {
value: 'Alice',
writable: true
},
'age': {
value: 30,
enumerable: true
}
});
5.Object.entries(obj)
功能:返回一个给定对象(
obj
)自身可枚举属性的键值对数组。每个键值对被表示为一个包含两个元素的数组,第一个元素是属性名,第二个元素是属性值。示例:
const obj = { a: 1, b: 2, c: 3 };
console.log(Object.entries(obj));
// 输出: [['a', 1], ['b', 2], ['c', 3]]
6.Object.freeze(obj)
功能:冻结一个对象,冻结后的对象不能被修改,即不能添加新属性、不能删除现有属性、不能修改属性的值(对于数据属性)、不能修改属性的可枚举性、可配置性和可写性(对于访问器属性)。
示例:
const obj = { a: 1, b: 2 };
Object.freeze(obj);
obj.a = 3;
// 在严格模式下会抛出错误
7.Object.getOwnPropertyDescriptor(obj, prop)
功能:返回指定对象(
obj
)上一个自有属性(prop
)的属性描述符。属性描述符是一个包含属性的各种配置信息(如value
、writable
、enumerable
、configurable
)的对象。示例:
const obj = { a: 1 };
console.log(Object.getOwnPropertyDescriptor(obj, 'a'));
// 输出: { value: 1, writable: true, enumerable: true, configurable: true }
8.Object.getOwnPropertyNames(obj)
功能:返回一个由指定对象(
obj
)的所有自身属性的属性名(包括不可枚举属性)组成的数组。示例:
const obj = Object.defineProperty({}, 'hidden', {
value: 42,
enumerable: false
});
console.log(Object.getOwnPropertyNames(obj));
// 输出: ['hidden']
9.Object.getOwnPropertySymbols(obj)
功能:返回一个给定对象(
obj
)的所有自身的符号属性的数组。符号属性是使用Symbol
类型作为键的属性。示例:
const sym = Symbol('description');
const obj = { [sym]: 'This is a symbol property' };
console.log(Object.getOwnPropertySymbols(obj));
// 输出: [Symbol(description)]
功能:返回指定对象(
obj
)的原型对象。示例:
const obj = { a: 1 };
const proto = Object.getPrototypeOf(obj);
console.log(proto);
// 输出: {}(通常是Object.prototype)
11.Object.is(value1, value2)
功能:判断两个值是否在值和类型上完全相同。与
===
类似,但在处理NaN
和+0
与-0
时有区别。Object.is(NaN, NaN)
返回true
,Object.is(+0, -0)
返回false
。示例:
console.log(Object.is(5, 5));
// 输出: true
console.log(Object.is(NaN, NaN));
// 输出: true
console.log(Object.is(+0, -0));
// 输出: false
12.Object.keys(obj)
功能:返回一个给定对象(
obj
)自身可枚举属性的字符串数组。示例:
const obj = { a: 1, b: 2, c: 3 };
console.log(Object.keys(obj));
// 输出: ['a', 'b', 'c']
13.Object.preventExtensions(obj)
功能:防止对象扩展,即不能再给对象添加新的属性。
示例:
const obj = { a: 1 };
Object.preventExtensions(obj);
bj.b = 2;
console.log(obj);
// 输出: { a: 1 }
14.Object.seal(obj)
功能:密封一个对象,密封后的对象不能添加新属性,也不能删除现有属性,但可以修改现有属性的值。
示例:
const obj = { a: 1, b: 2 };
Object.seal(obj);
obj.c = 3;
// 尝试添加新属性失败
obj.a = 3;
// 修改现有属性的值成功
console.log(obj);
// 输出: { a: 3, b: 2 }
15.Object.setPrototypeOf(obj, prototype)
功能:设置一个对象(
obj
)的原型(prototype
)。此操作可能会影响对象的继承关系和属性查找。示例:
const proto = { greet: function() { console.log('Hello!'); } };
const obj = {};
Object.setPrototypeOf(obj, proto);
obj.greet();
// 输出: Hello!
16.Object.values(obj)
功能:返回一个给定对象(
obj
)自身的(不含继承的)所有可枚举属性值的数组。示例:
const obj = { a: 1, b: 2, c: 3 };
console.log(Object.values(obj));
// 输出: [1, 2, 3]