黄子涵

4.4 属性访问表达式

属性访问表达式运算得到一个对象属性或一个数组元素的值。JavaScript 为属性访问定义了两种语法:

expression . identifier
expression [ expression ]

第一种写法是一个表达式后跟随一个句点和标识符。表达式指定对象,标识符则指定需要访问的属性的名称。第二种写法是使用方括号,方括号内是另外一个表达式(这种方法适用于对象和数组)。第二个表达式指定要访问的属性的名称或者代表要访问数组元素的索引。这里有一些具体的例子:

var o =	{x:1,y:{z:3}};	 // 一个示例对象
var a =	[o,4,[5,6]];     // 一个包含这个对象的示例数组
o.x		                 // => 1:表达式o的x属性
o.y.z		             // => 3:表达式o.y的z属性
o["x"]		             // => 1: 对象o的x属性
a[1]		            // => 4:表达式a中索引为1的元素
a[2]["1"]	             // => 6: 表达式a[2]中索引为1的元素
a[0].x		             // => 1: 表达式a[o]的x属性
var hzhO = { hzhX:1 ,hzhY:{hzhZ:3} };
var hzhA = [ hzhO, 4, [5, 6] ];
console.log("使用点运算符访问hzhO对象的hzhX属性:");
console.log(hzhO.hzhX);
console.log("访问hzhO对象的hzhY对象的hzhZ属性:");
console.log(hzhO.hzhY.hzhZ);
console.log("使用中括号符访问hzhO对象的hzhX属性:");
console.log(hzhO["hzhX"]);
console.log("访问hzhA数组中索引为1的元素:");
console.log(hzhA[1]);
console.log("访问hzhA[2]中索引为1的元素:");
console.log(hzhA[2]["1"]);
console.log("访问hzhA[0]的hzhX属性:");
console.log(hzhA[0].hzhX);
[Running] node "e:\HMV\JavaScript\JavaScript.js"
使用点运算符访问hzhO对象的hzhX属性:
1
访问hzhO对象的hzhY对象的hzhZ属性:
3
使用中括号符访问hzhO对象的hzhX属性:
1
访问hzhA数组中索引为1的元素:
4
访问hzhA[2]中索引为1的元素:
6
访问hzhA[hzhO]的hzhX属性:
1

[Done] exited with code=0 in 0.204 seconds

不管使用哪种形式的属性访问表达式,在“.”和“[”之前的表达式总是会首先计算。如果计算结果是 null 或者 undefined,表达式会抛出一个类型错误异常,因为这两个值都不能包含任意属性。如果运算结果不是对象(或者数组),JavaScript 会将其转换为对象。如果对象表达式后跟随句点和标识符,则会査找由这个标识符所指定的属性的值,并将其作为整个表达式的值返回。如果对象表达式后跟随一对方括号,则会计算方括号内的表达式的值并将它转换为字符串。不论哪种情况,如果命名的属性不存在,那么整个属性访问表达式的值就是 undefined。

显然,identifier 的写法更加简单,但需要注意的是,这种方式只适用于要访问的属性名称是合法的标识符,并且需要知道要访问的属性的名字。如果属性名称是一个保留字或者包含空格和标点符号,或是一个数字(对于数组来说),则必须使用方括号的写法。当属性名是通过运算得出的值而不是固定的值的时候,这时必须使用方括号写法。

posted @ 2022-05-25 16:59  黄子涵  阅读(82)  评论(0编辑  收藏  举报