在JavaScript中,Object是所有对象的基类,它具有许多常用方法。以下是其中一些常见的方法以及它们的示例用法:
- Object.keys(obj):返回一个由给定对象自身可枚举属性组成的数组
- Object.values(obj):返回一个给定对象所有可枚举属性值的数组
- Object.entries(obj):返回一个给定对象自身可枚举属性的键值对数组
- Object.assign(target, ...sources):将源对象的所有可枚举属性复制到目标对象中,并返回目标对象
- Object.freeze(obj):冻结一个对象,使其不能被修改、添加或删除属性
- Object.seal(obj):封闭一个对象,使其不能添加或删除属性,但可以修改现有属性
- Object.create(proto, [propertiesObject]):创建一个新对象,使用现有的对象作为新对象的原型,并可选择添加其他属性
- Object.hasOwnProperty(prop):返回一个布尔值,指示对象是否具有指定的属性。该方法不会检查原型链上的属性。
1、Object.keys(obj):返回一个数组,包含指定对象的所有可枚举属性的名称。
const person = { name: 'John', age: 30, gender: 'male' }; const keys = Object.keys(person); console.log(keys); // 输出 ["name", "age", "gender"]
2、Object.values(obj):返回一个数组,包含指定对象的所有可枚举属性的值。
const person = { name: 'John', age: 30, gender: 'male' }; const values = Object.values(person); console.log(values); // 输出 ["John", 30, "male"]
3、Object.entries(obj):返回一个包含指定对象所有可枚举属性的
[key, value]
数组。const person = { name: 'John', age: 30, gender: 'male' }; const entries = Object.entries(person); console.log(entries); // 输出 [["name", "John"], ["age", 30], ["gender", "male"]]
4、 Object.assign(target, ...sources):将源对象的所有可枚举属性复制到目标对象中,并返回目标对象
参数说明:
target
: 目标对象,即要拷贝属性的对象。sources
: 一个或多个源对象,即要从中复制属性的对象。可以传入多个源对象。const target = { a: 1, b: 2 }; const source1 = { b: 3, c: 4 }; const source2 = { c: 5, d: 6 }; const newObj = Object.assign(target, source1, source2); console.log(newObj); // { a: 1, b: 3, c: 5, d: 6 } console.log(target); // { a: 1, b: 3, c: 5, d: 6 }
5、Object.freeze(obj):冻结一个对象,使其不能被修改、添加或删除属性
const obj = { name: 'John', age: 30 }; // 冻结对象 Object.freeze(obj); // 尝试修改对象属性 obj.name = 'Mary'; // 不会生效 // 尝试添加新属性 obj.address = '123 Main St'; // 不会生效 console.log(obj); // 输出:{ name: 'John', age: 30 }
6、Object.seal(obj):封闭一个对象,使其不能添加或删除属性,但可以修改现有属性
const myObj = { name: "John", age: 30 }; // 密封对象 Object.seal(myObj); // 修改属性值 myObj.age = 35; console.log(myObj.age); // 输出 35 // 添加新属性 myObj.gender = "Male"; // 不会生效,因为对象已经被密封 console.log(myObj.gender); // 输出 undefined // 删除属性 delete myObj.name; // 不会生效,因为属性已经被设置为不可配置 console.log(myObj.name); // 输出 "John"
7、Object.create(proto, [propertiesObject]):创建一个新对象,使用现有的对象作为新对象的原型,并可选择添加其他属性
下面是一个使用
Object.create()
方法创建新对象的示例代码:const proto = { greeting: 'Hello', greet() { console.log(this.greeting); } }; const obj = Object.create(proto, { name: { value: 'John', enumerable: true, writable: false, configurable: true } }); obj.greet(); // 输出 "Hello" console.log(obj.name); // 输出 "John" // 尝试将 name 属性更改为 "Jane" obj.name = 'Jane'; // 抛出 TypeError,因为属性是不可写的 // 尝试删除 name 属性 delete obj.name; // 返回 true,因为属性是可配置的 console.log(obj.name); // 输出 undefined
8、Object.hasOwnProperty(prop):返回一个布尔值,指示对象是否具有指定的属性。该方法不会检查原型链上的属性。
const person = { name: 'John', age: 30, gender: 'male' }; console.log(person.hasOwnProperty('name')); // 输出 true console.log(person.hasOwnProperty('toString')); // 输出 false