以下是 JavaScript 中 Object
类型的主要方法、属性和示例。内容分为 静态方法(通过 Object
构造函数调用)和 实例方法/属性(通过对象实例调用):
一、静态方法(Object.xxx)
-
Object.assign(target, ...sources)
合并源对象的可枚举属性到目标对象。const obj1 = { a: 1 }; const obj2 = { b: 2 }; const merged = Object.assign({}, obj1, obj2); // { a:1, b:2 }
-
Object.create(proto)
创建一个新对象,使用现有对象作为新对象的原型。const parent = { x: 10 }; const child = Object.create(parent); console.log(child.x); // 10 (继承自parent)
-
Object.defineProperty(obj, prop, descriptor)
定义或修改对象的属性特性(如writable
,enumerable
,configurable
)。const obj = {}; Object.defineProperty(obj, 'x', { value: 42, writable: false }); obj.x = 100; // 静默失败(严格模式下报错)
-
Object.entries(obj)
返回对象自身可枚举属性的键值对数组。const obj = { a: 1, b: 2 }; console.log(Object.entries(obj)); // [ ['a',1], ['b',2] ]
-
Object.freeze(obj)
冻结对象,禁止修改属性、添加或删除属性。const obj = { x: 42 }; Object.freeze(obj); obj.x = 100; // 静默失败(严格模式下报错)
-
Object.keys(obj)
返回对象自身可枚举属性的键名数组。const obj = { a: 1, b: 2 }; console.log(Object.keys(obj)); // ['a', 'b']
-
Object.values(obj)
返回对象自身可枚举属性的值数组。const obj = { a: 1, b: 2 }; console.log(Object.values(obj)); // [1, 2]
-
Object.fromEntries(iterable)
将键值对列表(如Map
或数组)转换为对象。const entries = [ ['a', 1], ['b', 2] ]; const obj = Object.fromEntries(entries); // { a:1, b:2 }
-
Object.is(value1, value2)
严格比较两个值,处理NaN
和+0/-0
的特殊情况。console.log(Object.is(NaN, NaN)); // true console.log(Object.is(+0, -0)); // false
二、实例方法/属性(obj.xxx)
-
obj.hasOwnProperty(prop)
检查属性是否为对象自身的(非继承的)。const obj = { a: 1 }; console.log(obj.hasOwnProperty('a')); // true console.log(obj.hasOwnProperty('toString')); // false(继承自原型)
-
obj.toString()
返回对象的字符串表示。通常被覆盖以实现自定义输出。const obj = { a: 1 }; console.log(obj.toString()); // "[object Object]"
-
obj.valueOf()
返回对象的原始值。默认返回对象本身。const numObj = new Number(42); console.log(numObj.valueOf()); // 42(原始值)
-
obj.constructor
指向创建该实例的构造函数。const arr = []; console.log(arr.constructor === Array); // true
-
obj.isPrototypeOf(target)
检查对象是否在另一个对象的原型链上。function Parent() {} const child = new Parent(); console.log(Parent.prototype.isPrototypeOf(child)); // true
-
obj.propertyIsEnumerable(prop)
检查属性是否可枚举。const obj = { a: 1 }; console.log(obj.propertyIsEnumerable('a')); // true
-
obj.__proto__
(非标准,但广泛支持)**
访问或设置对象的原型(推荐使用Object.getPrototypeOf()
和Object.setPrototypeOf()
)。const obj = {}; obj.__proto__ = Array.prototype; console.log(obj instanceof Array); // true
三、其他重要概念
-
in
操作符:检查属性是否在对象或其原型链中。console.log('toString' in {}); // true(继承自Object.prototype)
-
delete
操作符:删除对象的属性。const obj = { a: 1 }; delete obj.a; console.log(obj.a); // undefined
总结
以上是 JavaScript 中对象的核心方法和属性。实际开发中,需注意区分 自身属性 和 原型链上的属性,以及方法的 可枚举性、可配置性 等特性。对于更高级的元编程,可进一步学习 Proxy
和 Reflect
对象。