JavaScript 中的对象

2023-02-23 11:33:17 浏览数 (1)

对象

JavaScript 中的对象,Object,可以简单理解成“名称 - 值”对(而不是键值对:现在,ES 2015 的映射表(Map),比对象更接近键值对),不难联想 JavaScript 中的对象与下面这些概念类似:

  • Python 中的字典(Dictionary)
  • Perl 和 Ruby 中的散列/哈希(Hash)
  • C/C 中的散列表(Hash table)
  • Java 中的散列映射表(HashMap)
  • PHP 中的关联数组(Associative array)

这样的数据结构设计合理,能应付各类复杂需求,所以被各类编程语言广泛采用。正因为 JavaScript 中的一切(除了核心类型,core object)都是对象,所以 JavaScript 程序必然与大量的散列表查找操作有着千丝万缕的联系,而散列表擅长的正是高速查找。

“名称”部分是一个 JavaScript 字符串,“值”部分可以是任何 JavaScript 的数据类型——包括对象。这使用户可以根据具体需求,创建出相当复杂的数据结构。

有两种简单方法可以创建一个空对象:

代码语言:javascript复制
var obj = new Object();

和:

代码语言:javascript复制
var obj = {};

这两种方法在语义上是相同的。第二种更方便的方法叫作“对象字面量(object literal)”法。这种也是 JSON 格式的核心语法,一般我们优先选择第二种方法。

“对象字面量”也可以用来在对象实例中定义一个对象:

代码语言:javascript复制
var obj = {
    name: "Carrot",
    _for: "Max",//'for' 是保留字之一,使用'_for'代替
    details: {
        color: "orange",
        size: 12
    }
}

对象的属性可以通过链式(chain)表示方法进行访问:

代码语言:javascript复制
obj.details.color; // orange
obj["details"]["size"]; // 12

下面的例子创建了一个对象原型,Person,和这个原型的实例,You

代码语言:javascript复制
function Person(name, age) {
  this.name = name;
  this.age = age;
}

// 定义一个对象
var You = new Person('You', 24);
// 我们创建了一个新的 Person,名称是 "You"
// ("You" 是第一个参数,24 是第二个参数..)

完成创建后,对象属性可以通过如下两种方式进行赋值和访问:

代码语言:javascript复制
// 点表示法 (dot notation)
obj.name = 'Simon';
var name = obj.name;

和:

代码语言:javascript复制
// 括号表示法 (bracket notation)
obj['name'] = 'Simon';
var name = obj['name'];
// can use a variable to define a key
var user = prompt('what is your key?')
obj[user] = prompt('what is its value?')

这两种方法在语义上也是相同的。第二种方法的优点在于属性的名称被看作一个字符串,这就意味着它可以在运行时被计算,缺点在于这样的代码有可能无法在后期被解释器优化。它也可以被用来访问某些以预留关键字作为名称的属性的值:

代码语言:javascript复制
obj.for = 'Simon'; // 语法错误,因为 for 是一个预留关键字
obj["for"] = 'Simon'; // 工作正常

0 人点赞