Wiem, że w PHP można mieć zmienne „zmienne”. Na przykład
$x = "variable";
$$x = "hello, world!";
echo $variable; // displays "hello, world!"
Czy można odwoływać się do zmiennej przez jej nazwę jako ciąg znaków w javascript? Jak by to zrobiono?
javascript
variables
variable-variables
Sznurowadło1291
źródło
źródło
Odpowiedzi:
Nie ma na to jednego rozwiązania (cóż, jest
eval
, ale nie rozważajmy tego poważnie). Możliwe jest dynamiczne uzyskiwanie dostępu do niektórych zmiennych globalnych przezwindow
, ale to nie działa w przypadku zmiennych lokalnych dla funkcji. Zmienne globalne, które nie stają się właściwością,window
to zmienne zdefiniowane za pomocąlet
iconst
orazclass
es.Prawie zawsze istnieje lepsze rozwiązanie niż używanie zmiennych zmiennych! Zamiast tego powinieneś przyjrzeć się strukturom danych i wybrać odpowiednią dla swojego problemu.
Jeśli masz ustalony zestaw nazw, na przykład
zapisz te nazwy / wartości jako właściwości obiektu i użyj notacji w nawiasach, aby wyszukać je dynamicznie:
W ES2015 + jest to jeszcze łatwiejsze do zrobienia dla istniejących zmiennych przy użyciu zwięzłej notacji właściwości :
Jeśli masz zmienne numerowane kolejno, takie jak
to powinieneś zamiast tego użyć tablicy i po prostu użyć indeksu, aby uzyskać dostęp do odpowiedniej wartości:
źródło
Jeśli jesteś zdesperowany, aby to zrobić, możesz spróbować użyć eval ():
Lub używając obiektu window:
http://www.hiteshagrawal.com/javascript/dynamic-variables-in-javascript
źródło
eval
nie może tworzyć zmiennych lokalnych w trybie ścisłym. Jednak wywołanie pośrednie może tworzyć zmienne globalne.Aby odwołać się do zmiennej w javascript tylko za pomocą ciągu znaków, możesz użyć
Możesz ustawiać i odwoływać się do zmiennych oraz obiektów w zmiennych.
źródło
W przeciwieństwie do PHP, JavaScript nie oferuje dostępu do tablicy globals (która zawiera odniesienia do wszystkich aktualnie zadeklarowanych nazw zmiennych). W związku z tym JavaScript nie oferuje natywnej obsługi zmiennych zmiennych. Możesz jednak emulować tę funkcję, o ile zdefiniujesz wszystkie zmienne jako część tablicy lub obiektu. To z kolei stworzy dla ciebie tablicę gloabls. Na przykład zamiast deklarować zmienną
hello
w zakresie globalnym w następujący sposób:zamknijmy go wewnątrz obiektu. Nazwiemy ten obiekt vv (zmienne zmienne):
Teraz możemy odwołać się do zmiennej za pomocą jej indeksu, a ponieważ indeksy tablic mogą być dostarczane za pomocą zmiennej, de facto używamy zmiennej zmiennej:
Odpowiedź na Twoje pytanie
Zastosujmy to do kodu podanego w pierwotnym pytaniu:
Praktyczne zastosowanie
Chociaż poprzedni kod może wydawać się absurdalnie uciążliwy i niepraktyczny, istnieją praktyczne zastosowania zmiennych zmiennych w JavaScript używających tego typu hermetyzacji. W poniższym przykładzie używamy tej samej koncepcji, aby uzyskać identyfikator niezdefiniowanej liczby elementów HTML.
Ten przykład deklaruje zmienne zmienne (klucze
elementIds
) na podstawie identyfikatora każdego elementu i przypisze węzeł wspomnianego elementu jako wartość każdej zmiennej. A ponieważ używanie zmiennych globalnych w JavaScript jest generalnie odradzane, nadawanie zmiennym zmiennym unikalnego zakresu (w tym przypadku zadeklarowanie ich wewnątrzelementIds
tablicy) jest nie tylko schludne, ale także bardziej odpowiedzialne.źródło
Oczywiście, że możesz, ale nie rób tego. Zmienne muszą być globalne.
źródło
źródło
Możesz użyć JavaScript
eval(str)
funkcji .Ta funkcja konwertuje dostarczony ciąg na kod JS, a następnie wykonuje go.
Na przykład:
Aby użyć go jako zmiennej zmiennej, możesz wykonać następujące czynności:
To da dokładnie taki sam wynik jak:
(Przykład pochodzi z podręcznika PHP na temat zmiennych zmiennych ).
źródło