Czy istnieje sposób, aby uzyskać nazwę zmiennej jako ciąg znaków w JavaScript? (jak NSStringFromSelector
w kakao )
Chciałbym zrobić tak:
var myFirstName = 'John';
alert(variablesName(myFirstName) + ":" + myFirstName);
--> myFirstName:John
AKTUALIZACJA
Próbuję połączyć przeglądarkę i inny program za pomocą JavaScript. Chciałbym wysłać nazwy instancji z przeglądarki do innego programu dla metody wywołania zwrotnego:
FooClass = function(){};
FooClass.someMethod = function(json) {
// Do something
}
instanceA = new FooClass();
instanceB = new FooClass();
doSomethingInAnotherProcess(instanceB); // result will be substituted by using instanceB.someMethod();
...
Z innego programu:
evaluateJavascriptInBrowser("(instanceName).someMethod("resultA");");
javascript
ziemniak rybny
źródło
źródło
variablesName(myFirstName)
, znasz już nazwę zmiennej”. Próbuję, ale nie mogę ...console.log("myvar = " + myvar);
w kółko każdej zmiennej.Odpowiedzi:
Zwykle użyłbyś tabeli skrótów w sytuacji, w której chcesz zmapować nazwę na jakąś wartość i móc pobrać obie.
źródło
obj
są drukowane jakoname: value
pary. Ale tekst wyjaśniający mógłby być bardziej przejrzysty.Podobnie jak odpowiedź Setha, ale
Object.keys()
zamiast tego używa :źródło
Aby rozwiązać problem, możesz skorzystać z następującego rozwiązania:
źródło
W ES6 można by napisać coś takiego:
Nie najlepiej wyglądająca rzecz, ale spełnia swoje zadanie.
Wykorzystuje to niszczenie obiektów w ES6.
Więcej informacji tutaj: https://hacks.mozilla.org/2015/05/es6-in-depth-destruifying/
źródło
let nameObject = {myVar}
bardzo przydatny! Nie wydaje się być nigdzie udokumentowany. Masz jakieś linki?Jednak myślę, że powinieneś lubić „karim79”
źródło
x = 2; y = 2;
lubx = {a:1}; b = x;
ostrzegłaby każdego z nichvar foo = function f(){ f.x = 2; for(o in f){ if(f[o]===f.x) alert(o); } }
wtedy wywołanief()
ostrzeżeDziała to w przypadku podstawowych wyrażeń
Przykład
Skrawek:
źródło
Prawdopodobnie pop byłby lepszy niż indeksowanie z [0] ze względów bezpieczeństwa (zmienna może być zerowa).
źródło
Nie można tego przekształcić w funkcję, ponieważ zwraca nazwę zmiennej funkcji.Edycja: Podziękowania dla @Madeo za wskazanie, jak uczynić to funkcją .
Będziesz musiał wywołać funkcję z pojedynczą tablicą elementów zawierającą zmienną.
debugVar({somefancyvariable});
Edycja:
Object.keys
można odwoływać się tak, jakkeys
w każdej przeglądarce, w której go testowałem, ale zgodnie z komentarzami nie działa wszędzie.źródło
const getVarName = (v) => Object.keys(v)[0];
a następnie wywołaj tę funkcję w ten sposóbgetVarName({whatEverVariable})
Od ECMAScript 5.1 możesz używać Object.keys do pobierania nazw wszystkich właściwości z obiektu.
Oto przykład:
źródło
Kiedy funkcja jest zapisywana w funkcji, która zmienia wartości różnych zmiennych globalnych, nie zawsze jest to moje pierwsze imię, lecz jest to coś, przez co przechodzi. Spróbuj, to zadziałało dla mnie.
Uruchom w jsfiddle
Napiszę do okna „jack”.
źródło
Możesz zastanowić się nad typami w javascript i uzyskać nazwy właściwości i metod, ale to, czego potrzebujesz, to coś takiego jak
Lambda Expressions Trees
w .NET, myślę, że nie jest to możliwe ze względu na dynamiczny charakter i brak statycznego systemu typów w javascript.źródło
Potrzebowałem tego, nie chcę używać obiektów i wymyśliłem następujące rozwiązanie, odwracając pytanie.
Zamiast zamieniać nazwę zmiennej na ciąg, konwertuję ciąg na zmienną.
Działa to tylko wtedy, gdy znana jest nazwa zmiennej.
Weź to:
Powinno to wyświetlić:
Można to zrobić w następujący sposób:
Więc używam ciągu
"height"
i zamieniam go w zmiennąheight
za pomocąwindow[]
polecenia.źródło
window
obiektu, ponieważ zmienna o tej samej nazwie została zadeklarowana w zakresie okna. Działa to tylko wtedy, gdy zmienna jest zadeklarowana w zakresie okna, a nie w funkcji / zamknięciu.Krótkie sposoby, które znalazłem do tej pory, aby uzyskać nazwę zmiennej jako ciąg:
źródło
To zadziałało przy użyciu Internet Explorera (9, 10 i 11), Google Chrome 5:
Tabela zgodności przeglądarek:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
źródło
Stworzyłem tę funkcję w oparciu o JSON, jak ktoś zasugerował, działa dobrze dla moich potrzeb debugowania
źródło
Nie, nie ma.
Poza tym, jeśli potrafisz pisać
variablesName(myFirstName)
, znasz już nazwę zmiennej („myFirstName”).źródło
nameof(myVariable)
W C # (który zwraca ciąg „myVariable”) jest ochrona przed błędami podczas refaktoryzacji lub wprowadzania innych zmian w kodzie. Typowym przypadkiem użycia jest dodanie nazwy zmiennej do generowanego komunikatu o błędzie. większość części, które uważam za dosłowne napisy, pachną kodem i podejrzewam, że właśnie dlatego przynajmniej Visual Studio pokazuje je w kolorze czerwono-pomarańczowym. Wiem, wiem, to pytanie dotyczy JavaScript, ale właśnie wyjaśniłem, dlaczego tutaj skończyłem.console.log('test')
lub kiedy naprawdę tego potrzebujesz.