JavaScript 中的对象方法
JavaScript 中的对象方法分为两类:实例方法(直接作用于对象实例)和 静态方法(直接作用于 Object
构造函数)。以下是两类方法的详细列表:
对象的实例方法
这些方法可以通过对象实例调用。
-
hasOwnProperty(property)
- 检查对象是否有指定的自有属性(不包括原型链上的属性)。
-
示例:
const obj = { a: 1 }; console.log(obj.hasOwnProperty('a')); // true console.log(obj.hasOwnProperty('toString')); // false
-
isPrototypeOf(object)
- 检查当前对象是否在指定对象的原型链上。
- 示例:
function A() {} const obj = new A(); console.log(A.prototype.isPrototypeOf(obj)); // true
-
propertyIsEnumerable(property)
- 检查指定属性是否是对象的自有属性,且是可枚举的。
- 示例:
const obj = { a: 1 }; console.log(obj.propertyIsEnumerable('a')); // true
-
toString()
- 返回对象的字符串表示。
- 示例:
const obj = {}; console.log(obj.toString()); // [object Object]
-
valueOf()
- 返回对象的原始值(通常是对象本身)。
- 示例:
const obj = { a: 1 }; console.log(obj.valueOf()); // { a: 1 }
Object
的静态方法
这些方法通过 Object
调用。
-
Object.create(proto[, propertiesObject])
- 使用指定的原型创建一个新对象。
- 示例:
const proto = { greet: () => "hello" }; const obj = Object.create(proto); console.log(obj.greet()); // "hello"
-
Object.assign(target, ...sources)
- 将一个或多个源对象的属性复制到目标对象。
- 示例:
const target = { a: 1 }; const source = { b: 2 }; Object.assign(target, source); console.log(target); // { a: 1, b: 2 }
-
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.entries(obj)
- 返回对象自身的可枚举属性的键值对数组。
- 示例:
const obj = { a: 1, b: 2 }; console.log(Object.entries(obj)); // [["a", 1], ["b", 2]]
-
Object.freeze(obj)
- 冻结对象,使其不可修改。
- 示例:
const obj = { a: 1 }; Object.freeze(obj); obj.a = 2; // 无效 console.log(obj.a); // 1
-
Object.seal(obj)
- 密封对象,禁止添加或删除属性,但可以修改已有属性的值。
- 示例:
const obj = { a: 1 }; Object.seal(obj); delete obj.a; // 无效 console.log(obj.a); // 1
-
Object.is(value1, value2)
- 判断两个值是否严格相等。
- 示例:
console.log(Object.is(0, -0)); // false console.log(Object.is(NaN, NaN)); // true
-
Object.getPrototypeOf(obj)
- 获取对象的原型。
- 示例:
const obj = {}; console.log(Object.getPrototypeOf(obj)); // {}
-
Object.setPrototypeOf(obj, prototype)
- 设置对象的原型。
- 示例:
const obj = {}; const proto = { greet: () => "hello" }; Object.setPrototypeOf(obj, proto); console.log(obj.greet()); // "hello"
-
Object.getOwnPropertyDescriptor(obj, property)
- 获取指定属性的描述符。
- 示例:
const obj = { a: 1 }; console.log(Object.getOwnPropertyDescriptor(obj, 'a')); // { value: 1, writable: true, enumerable: true, configurable: true }
-
Object.getOwnPropertyDescriptors(obj)
- 获取对象所有属性的描述符。
- 示例:
const obj = { a: 1 }; console.log(Object.getOwnPropertyDescriptors(obj));
-
Object.getOwnPropertyNames(obj)
- 返回对象自身的所有属性名(包括不可枚举的)。
- 示例:
const obj = { a: 1 }; console.log(Object.getOwnPropertyNames(obj)); // ["a"]
-
Object.getOwnPropertySymbols(obj)
- 返回对象自身的所有符号属性。
- 示例:
const sym = Symbol("a"); const obj = { [sym]: 1 }; console.log(Object.getOwnPropertySymbols(obj)); // [Symbol(a)]
-
Object.preventExtensions(obj)
- 禁止对象扩展(添加新属性)。
- 示例:
const obj = { a: 1 }; Object.preventExtensions(obj); obj.b = 2; // 无效 console.log(obj.b); // undefined
-
Object.isExtensible(obj)
- 检查对象是否可扩展。
- 示例:
const obj = {}; console.log(Object.isExtensible(obj)); // true Object.preventExtensions(obj); console.log(Object.isExtensible(obj)); // false
-
Object.isFrozen(obj)
- 检查对象是否被冻结。
- 示例:
const obj = Object.freeze({}); console.log(Object.isFrozen(obj)); // true
-
Object.isSealed(obj)
- 检查对象是否被密封。
- 示例:
const obj = Object.seal({}); console.log(Object.isSealed(obj)); // true
总结
- 实例方法:
hasOwnProperty
、isPrototypeOf
、propertyIsEnumerable
、toString
、valueOf
。 - 静态方法:
create
、assign
、freeze
、seal
、is
、getPrototypeOf
、setPrototypeOf
等。
这些方法可以帮助你更灵活地操作和管理对象!