检索对象中包含的值有两种形式。
❑当属性名为任意字符形式,或者无法确定属性名时,采用在后缀中括住一个字符串表达式的方式。采用这种方式比较安全,例如:
obj["first-name"]
❑如果字符串表达式是一个常数,并是一个合法的JavaScript标识符而并非保留字,那么也可以用点(.)表示法代替。优先考虑使用点表示法,因为它更紧凑且可读性更好,例如:
obj.obj_1.Obj_2
注意,如果尝试检索一个并不存在的成员元素的值,将返回一个undefined值,例如:
obj["middle-name"];//undefined
obj.middle_name;//undefined
obj["FIRST-NAME"];//undefined
读者可以使用||运算符为对象属性设置默认值,当对象属性值未定义时,以默认值进行传递,例如:
var middle=obj["middle-name"]||"(none)";
var status=obj.status||"unknown";
由于JavaScript在检索一个undefined值时将会导致TypeError异常,所以建议读者不要直接检索对象属性值。为了稳妥起见,不妨考虑通过&&运算符来避免此类错误,例如:
obj.obj_1;//undefined
obj.obj_1.model;//抛出"TypeError"异常
obj.obj_1&&obj.obj_1.model;//undefined
在上面代码中,先检索obj.obj_1是否存在,如果存在,则进一步检索obj.obj_1包含的属性值。如果直接去读取obj.obj_1.model属性值,那么有可能会发生异常。