属性
在之前的章节中,我们已经看到了一些可疑的表达式,例如myString.length
(获取字符串的长度)和Math.max
(最大值函数)。 这些表达式可以访问某个值的属性。 在第一个中,我们访问myString
中的length
属性。 第二个中,我们访问Math
对象(它是数学相关常量和函数的集合)中的名为max
的属性。
在 JavaScript 中,几乎所有的值都有属性。但null
和undefined
没有。如果你尝试访问null
和undefined
的属性,会得到一个错误提示。
null.length;
// → TypeError: null has no properties
在JavaScript中访问属性的两种主要方式是点(.
)和方括号([]
)。 value.x
和value [x]
都可以访问value
属性,但不一定是同一个属性。 区别在于如何解释x
。 使用点时,点后面的单词是该属性的字面名称。 使用方括号时,会求解括号内的表达式来获取属性名称。 鉴于value.x
获取value
的名为x
的属性,value [x]
尝试求解表达式x
,并将结果转换为字符串作为属性名称。
所以如果你知道你感兴趣的属性叫做color
,那么你会写value.color
。 如果你想提取属性由绑定i
中保存的值命名,你可以写value [i]
。 属性名称是字符串。 它们可以是任何字符串,但点符号仅适用于看起来像有效绑定名的名称。 所以如果你想访问名为2
或John Doe
的属性,你必须使用方括号:value[2]
或value["John Doe"]
。
数组中的元素以数组属性的形式存储,使用数字作为属性名称。 因为你不能用点号来表示数字,并且通常想要使用一个保存索引的绑定,所以你必须使用括号来表达它们。
数组的length
属性告诉我们它有多少个元素。 这个属性名是一个有效的绑定名,我们事先知道它的名字,所以为了得到一个数组的长度,通常写array.length
,因为它比array["length"]
更容易编写。