2012-01-02 11 views
25

Czy to dozwolone?Obiekt JavaScript - Początek klawisza z liczbą dozwoloną?

myObj = {}; 
myObj['4a56546s6d'] 

Albo klucz musi zaczynać się od litery jak:

myObj = {}; 
myObj['x4a56546s6d'] 

Mogę mieszać zarówno jak:

myObj = {}; 
myObj['x4a56546s6d'] 
myObj['4a56546s6d'] 

Pytam, bo latków (na przykład identyfikator w HTML) musi zaczynać się od litery. Mam w tej chwili third version i fireBug oznacza klawisze (zaczynając od numeru) niebieski.

+2

Gdyby nie było dozwolone, to pojawi się błąd. –

Odpowiedz

47

Możesz użyć dowolnego klawisza, jeśli korzystasz z [string], aby uzyskać dostęp do klucza, nawet klawisz z spacją. Wszystkie one są ważne:

myObj['key with space'] 
myObj['12345'] 

Ale jeśli chcesz używać Dot . operatorowi dostęp do klucza a następnie klawisz musi być poprawnym identyfikatorem co oznacza, że ​​nie może zaczynać się od cyfry lub zawierać przestrzeń.

6

Zobacz tę stronę: https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Core_Language_Features#Variables

identyfikator Javascript musi zaczynać się od litery, podkreślenia (_), lub znak dolara ($); kolejne znaki mogą być również cyframi (0-9). Ponieważ w JavaScript jest rozróżniana wielkość liter, litery zawierają znaki od "A" do "Z" (wielkie litery) i znaki od "a" do "z" (małe litery).

Można go używać w ten sposób, ale nie będzie w stanie uzyskać dostęp do danych za pomocą myObj.4a56546s6d ponieważ począwszy identyfikator z numerem nie jest dozwolone.

0

Jeśli twój klucz (nazwa właściwości) jest literałem ciągowym, to jest całkowicie poprawne, aby mieć cyfrę jako pierwszą literę.

Zobacz odpowiedzi na pytanie this, aby uzyskać więcej informacji o prawidłowych kluczach w JS.

16

Za pomocą operatora kropki można uzyskać dostęp do wartości z klawiszy, które nie zawierają znaków spacji lub znaków specjalnych, słów rozpoczynających się od numeru (czyli tych, które nie mogą być używane jako np. Nazwy zmiennych), w przeciwnym razie można uzyskać dowolne odwołanie do nich jak klucze w tablicy asocjacyjnej.

Możesz użyć jako klucza, jak chcesz, ale pamiętaj, że klucz będzie ciągiem reprezentacji tego, co wstawisz. Klarowanie - zostanie wywołane doString().

Look:

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]" 

Można zastąpić toString() metody, np

Object.prototype.toString = function(){ return "object"} 

a = {}; 
a[ {} ] = "whatever"; 
alert(a["object"]); // alerts "whatever" because as now toString() returns "object" from each created object 
+12

Bardzo ilustrujące przykłady, +1. Ale dzieci, nie zastępujcie metod "Object.prototype" w domu. To zbyt niebezpieczne. –

Powiązane problemy