JS標識符的命名規則,即變量的命名規則:
- 標識符只能由字母、數字、下划線和‘$’組成
- 數字不可以作為標識符的首字符
對象屬性的命名規則
- 通過[]操作符為對象添加屬性時,屬性名稱可以是任何字符串(包括只包含空格的字符串和空字符串);
- 通過.操作符為對象添加屬性時,屬性名稱必須是合法的標識符名稱;
- 如果屬性名包含非法的標識符字符,則只能采用obj[“propertyName”]的形式;
- 如果屬性名是合法的標識符,讀取時即可以采用obj.propertyName,也可以采用obj[“propertyName”]的形式;
舉例:
var obj = new Object(); obj["home addr"]="Tianjin"; obj["!@#$%"]="!@#$%"; obj[""]="empty string"; obj[" "]="string contains only space";
在控制台中查看如下:
純數字屬性名的特殊性
純數字屬性名的使用比較特殊,可以通過對象字面量和obj[number]的形式為對象添加純數字屬性,解釋器會自動將數字轉換為數字字符串。
定義實例:
var obj = {1:"first"} obj[2]="second"; obj["3"]="third";
以上三種為對象添加純數字屬性的方法是等效的,控制台查看如下:
讀取的方式有兩種:
- obj[number]
- obj["number"]
需要注意,采用obj.number的方式讀取純數字屬性名稱時瀏覽器會報錯,如下
布爾屬性名的特殊性
布爾屬性名和純數字屬性名有着相似的行為,如下
采用[]操作符讀取對象屬性時,js解釋器執行的動作
采用obj[propertyName]的形式讀取或創建對象屬性時,解釋器首先會檢查propertyName是值類型字面量還是用戶定義的變量,如果propertyName是值類型的字面量,則解釋器自動將其轉換為字符串后再讀取或創建屬性,如obj[1],obj[true]會被轉換成obj["1"]、obj["true"].
如果propertyName是變量名稱(或者是表達式),則解釋器會讀取變量內容(或對表達式求值),如果變量的值是字符串,則直接讀取屬性,如果是其他類型的數據,則轉換為字符串后再讀取屬性。舉例如下:
定義對象:
定義變量:
讀取屬性:
更特殊的,為obj添加undefined屬性:
使用未初始化的變量c讀取obj的undefined屬性:
由於c沒有初始化,所以將c轉換為字符串的結果是“undefined”,而obj存在“undefined”屬性。