只有一种数据类型可以包含多个值:对象 。数组是对象的一种特殊形式。

对象的形式如下:

{key: value, key: value, ...}

数组的形式如下

[value, value, ...]

数组和对象都有一个key -> value结构。数组中的键必须是数字,而任何字符串都可以用作对象中的键。键值对也称为“属性”。

可以使用点表示法访问对象属性

const value = obj.someProperty;

如果属性名称不是有效的  标识符名称,或者属性名称是变量的值,我们可以使用[]访问对象的属性:

// the space is not a valid character in identifier names
const value = obj[\"some Property\"];

// property name as variable
const name = \"some Property\";
const value = obj[name];

但对于数组,只能使用括号表示法访问数组元素:

const value = arr[5]; // arr.5 would be a syntax error

// property name / index as variable
const x = 5;
const value = arr[x];

 

示例:访问嵌套数据结构

嵌套数据结构是一个数组或对象,它引用其他数组或对象,即其值为数组或对象。可以通过连续应用点或括号符号来访问这些结构。

这是一个例子:

const data = {
    code: 42,
    items: [{
        id: 1,
        name: \'foo\'
    }, {
        id: 2,
        name: \'bar\'
    }]
};

假设我们要访问items的第二个name属性值

下面教大家如何一步一步的获取items的第二个name属性值

我们可以看到data是一个对象,因此我们可以使用点符号来访问它的属性。该items属性访问如下:

data.items

该值是一个数组,要访问其第二个元素,我们必须使用括号表示法:

data.items[1]   //注意index从0开始

该值是一个对象,我们再次使用点符号来访问name属性。所以我们最终得到:

const item_name = data.items[1].name;

或者,我们可以使用方括号[]获取,如下:

const item_name = data[\'items\'][1][\'name\'];

 

在某些情况下,当我们访问对象属性值时返回undefined, 这说明对象/数组根本没有这个属性

const foo = {bar: {baz: 42}};
console.log(foo.baz); // undefined

使用console.log检查对象/数组的结构,您尝试访问的属性实际上在对象的第一层,正确代码如下:

console.log(foo.bar.baz); // 42

 

如果对象属性名称是动态的或者我们根本不知道它的属性名称,那我们该如何获取对象的值呢? 这时我们可以使用for in:

/**
 * 生成示例格式的列表,并且遍历:
 * aqiData = {
 *    \"北京\": 90,
 *    \"上海\": 40
 * };
 */
 //之前的赋值操作
var city = document.getElementById(\'aqi-city-input\').value,
      num = document.getElementById(\'aqi-value-input\').value;
//这里就不能用.看随后属性访问的比较
aqiData[city] = num;
//随后的遍历操作
for(var city in aqiData) {
    alert(city+\":\"+aqiData[city]);//北京:90,上海:40等
}
收藏 打印