Dlaczego przy użyciu ciągów jako kluczy tablicy, konsola pokazuje tę tablicę bez tych deklarowanych wartości i podczas iteracji przez te wartości, gdy klucze są ciągami nie są wyświetlane? , chociaż mogę uzyskać ich wartość.Ciągi znaków jako klucze tablicy w javascript
>> var arr = [ 0, 1, 2, 3 ];
undefined
>> arr["something"] = "aught";
"aught"
>> arr
[0, 1, 2, 3]
>> arr["something"]
"aught"
>> for(var i = arr.length; i--; console.log(arr[ i ]));
3
2
1
0
Rozumiem, że tablice są obiektami, które zaimplementowały pewien rodzaj interfejsu "wyliczeniowego" w silniku javascript. Najbardziej interesujące jest to, że interpreter nie rzuca ani ostrzeżenia, ani błędu, więc spędziłem kilka czasu na szukaniu miejsca, w którym dane mogłyby zostać utracone. teraz, że niesłusznie i stosowane []
zamiast {}
@abuduba, ponieważ nie ma w tym nic złego :-) Twój kod jest całkowicie poprawny javascript. Jest niejednoznaczne dla czytelnika, ponieważ miksujesz dwa rodzaje tablic, ale jest on ważny. Dlaczego chcesz, aby tłumacz powiedział, że coś jest nie tak, kiedy nie ma nic złego. –
Jest to głównie problem z terminologią, ale javascript NIE na ogół nazywa się '{}' tablicą asocjacyjną. Nazywają to obiektem, który ma właściwości. Czy większość ludzi nie jest zgodna co do tego, że nie należy mylić rzeczy, nazywając obiekt javascript tablicą asocjacyjną? – jfriend00
Uwaga: Jeśli spróbujesz użyć '' defineProperty'' na tablicy takiej jak '' Object.defineProperty.call (arr, 'something', 'ilght'); '' spowoduje to błąd. – David