讀古今文學網 > 編寫高質量代碼:改善JavaScript程序的188個建議 > 建議82:不要直接檢索對像屬性值 >

建議82:不要直接檢索對像屬性值

檢索對像中包含的值有兩種形式。

❑當屬性名為任意字符形式,或者無法確定屬性名時,採用在後綴中括住一個字符串表達式的方式。採用這種方式比較安全,例如:


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屬性值,那麼有可能會發生異常。