对象与数组

课后整理 2020-12-10

对象(Object)与数组(Array)是两种不同类型的数据集合,其中对象是包含已命名的值的无序集合,而数组是包含已编码的值的有序集合。

【示例1下面示例分别使用对象和数组来存储1和true这两个值,则代码结构如下。

var o = {                                                  //对象 
    x : 1,                                                 //该值命名为x
    y : true                                              //该值命名为y
}
var a = [                                                   //数组 
    1,                                                     //该值隐含编码为0
    true                                                   //该值隐含编码为1
]

对象的存储形式很像数组,因此被称为关联数组,但是它不是真正意义上的数组。关联数组就是将值与特定字符串关联在一起。真正的数组与字符串没有联系,但是它将值和非负整数的下标关联在一起。

console.log(o["x"]);                                   //返回1,在对象o中,值1与字符串x关联 
console.log(a[0]);                                      //返回1,在数组a中,值1与数值0关联 

使用点语法(.)可以存取对象属性,而数组使用中括号([])来存取属性。针对上面对象属性的读取操作,下面两行代码的意思是相同的。

o.x;                                                          //返回1,使用点语法存取属性 
o["x"];                                                     //返回1,使用中括号存取属性 

使用点语法存取属性时,属性名是标识符;而使用中括号存取属性时,属性名是字符串。

【示例2当用点号运算符来存取对象属性时,属性名是用标识符表示的;当用中括号来存取对象属性时,属性名是用字符串表示的,因此可以在运行过程中动态生成字符串。

var o = {                                                  //对象直接量 
    p1 : 1,
    p2 : true
}
for( var i = 1; i < 3; i ++  ){                        //循环读取对象的属性值 
    console.log( o["p" + i] );
}

通过采用关联数组法访问带有字符串表达式的对象属性是非常灵活的。当对象属性非常多时,使用点语法来存取对象属性会比较麻烦。另外,在一些特殊情况下只能使用关联数组形式来存取对象属性。