返回

多角度解读 JavaScript 对象,全面理解对象属性和特性

前端

JavaScript 对象属性:枚举与值

JavaScript 对象的属性可以分为两种:枚举属性和值属性。

  • 枚举属性: 可以通过 for-in 循环来枚举。枚举属性的 [[ Enumerable ]] 特性默认为 true
  • 值属性: 不能通过 for-in 循环来枚举。值属性的 [[ Enumerable ]] 特性默认为 false

JavaScript 对象特性

JavaScript 对象的特性包括:

  • [[ Value ]]: 表示对象属性的实际值。
  • [[ Writable ]]: 表示对象属性是否可以被修改。默认情况下,对象属性是可写的。
  • [[ Enumerable ]]: 表示对象属性是否可以通过 for-in 循环来枚举。默认情况下,对象属性是可枚举的。
  • [[ Configurable ]]: 表示对象属性是否可以被删除或重新定义。默认情况下,对象属性是可配置的。

JavaScript 对象的原型和继承

每个 JavaScript 对象都有一个原型。原型是一个对象,它包含了该对象继承的属性和方法。对象可以通过 prototype 属性访问其原型。

对象可以通过继承关系从原型继承属性和方法。当一个对象从另一个对象继承时,它将获得该对象的原型中的所有属性和方法。

实例

// 创建一个对象
const person = {
  name: "John Doe",
  age: 30
};

// 枚举对象属性
for (const property in person) {
  console.log(property);
}
// 输出:
// name
// age

// 获取对象属性的值
console.log(person.name); // "John Doe"
console.log(person.age); // 30

// 修改对象属性的值
person.name = "Jane Doe";
console.log(person.name); // "Jane Doe"

// 添加一个新属性
person.job = "Software Engineer";
console.log(person.job); // "Software Engineer"

// 获取对象的原型
const personPrototype = Object.getPrototypeOf(person);
console.log(personPrototype);
// 输出:
// {constructor: ƒ}

// 获取原型中的属性
console.log(personPrototype.hasOwnProperty("toString")); // true

总结

JavaScript 对象是一种强大的数据结构,它可以用来存储和组织数据。对象属性可以分为枚举属性和值属性。对象特性包括 [[ Value ]][[ Writable ]][[ Enumerable ]][[ Configurable ]]。对象可以通过继承关系从原型继承属性和方法。