Оператором точки вы можете получить доступ к значениям из ключей, которые не содержат ни пробелов, ни специальных символов, слов, начинающихся с цифры (то есть тех, которые нельзя использовать в качестве, например, имен переменных), в противном случае вы можете получить любую ссылку на они как ключи в ассоциативном массиве.
Вы можете использовать в качестве ключа все, что хотите, но помните, что ключ будет строковым представлением того, что вы вставили. Уточнение - будет называться toString ().
Посмотрите:
var myObj = {};
myObj[ 3 ] = "key is 3";
alert( myObj[ "3" ] ); //alerts "key is 3" because (3).toString() is "3"
//but an error will thrown when accessing by myObj.3
myObj[ {} ] = "key is {}"
alert( myObj["[object Object]"] ) // alerts "key is {}" because ({}).toString() is "[object Object]"
Вы можете переопределить метод toString()
, например:
Object.prototype.toString = function(){ return "object"}
a = {};
a[ {} ] = "whatever";
alert( a["object"] ); // alerts "whatever" because as now toString() returns "object" from each created object