JavaScript 的對象是一種無序的集合數據類型,是由鍵值對組成的,與Python字典有一定相似性。不過javascript的鍵要求必須是字符串,而值可以是其他類型,甚至鍵必須是唯一的,因為當鍵不唯一時,后面的鍵會覆蓋前面的鍵。
1 var max = { 2 'birth-month':'January', 3 'birth-month':1} 4 alert(max['birth-month']);
彈出的對話框顯示1,而不是January.
既然鍵是字符串,我們可以用加引號來聲明鍵,如'name',而官方也給出了我們不加引號也聲明的例子,如age,這兩種聲明有什么不同呢?
1 var max = {'name':'marxwolf', 2 age:18, 3 'birth-month':'January', 4 'birth-month':18} 5 alert(max.name); 6 alert(max['name']); 7 alert(max.age); 8 alert(max['age']); 9 //alert(max.birth-month); 10 alert(max['birth-month']);
如果鍵的聲明是一個有效的變量名,我們可以加引號,也可以不加引號,也就是說這兩種情況是等價的,我們可以用max.name索引,也可以用max['name']索引,這兩種情況完全是等價的。
但是如果鍵的聲明不是一個有效的變量名,比如說birth-month,加入了中划線,就必須加引號,不然會產生語法錯誤,而這種情況下的調用,也必須是max['birth-month']這種方式。
但是,我又發現當在循環中調用的時候,好像只能用max[key]這種形式,而max.key這種形式會報錯,max[key]這種形式key可以是一個變量,也可以是一個定值,但如果是定值的話要加引號(單雙都行),max.key這種形式key只能是定值且不用加引號。