Odczytanie nazwy zmiennej w runtime'ie

0

Jak zamienić nazwę zmiennej na łańcuch tekstowy?

0

Nie możesz użyć kluczy w słowniku?

0
Riddle napisał(a):

Nie możesz użyć kluczy w słowniku?

A nie byłoby prościej odpowiedzieć...

1
gabus napisał(a):
Riddle napisał(a):

Nie możesz użyć kluczy w słowniku?

A nie byłoby prościej odpowiedzieć...

Wszelki metaprogramming jak "zmiana nazwy zmiennej" to jedno z wielu sposobów jak można sobie strzelić w stopę i nic dobrego z tego nie wyjdzie.

Użyj słownika:

const name = "jakaś nazwa";

const dict = {
  [name]: "jakaś wartość"
}

console.log(dict["jakaś nazwa"]);
0
Riddle napisał(a):
gabus napisał(a):
Riddle napisał(a):

Nie możesz użyć kluczy w słowniku?

A nie byłoby prościej odpowiedzieć...

Wszelki metaprogramming jak "zmiana nazwy zmiennej" to jedno z wielu sposobów jak można sobie strzelić w stopę i nic dobrego z tego nie wyjdzie.

Użyj słownika:

const name = "jakaś nazwa";

const dict = {
  [name]: "jakaś wartość"
}

console.log(dict["jakaś nazwa"]);

Nie oto mi chodziło.
Niech mamy:var Common=new Array();, chciałbym coś zrobić w rodzaju var c=Object(Common).toString(), powinniiśmy otrzymać ciąg "Common", ale tutaj nie wychodzi, wychodzi ciąg pusty. Pytanie co zrobić, by otrzymać ten ciąg?

1
gabus napisał(a):

Niech mamy:var Common=new Array();, chciałbym coś zrobić w rodzaju var c=Object(Common).toString(), powinniiśmy otrzymać ciąg "Common", ale tutaj nie wychodzi, wychodzi ciąg pusty. Pytanie co zrobić, by otrzymać ten ciąg?

Czyli źle zadałeś pytanie, bo nie chodzi Ci o to żeby zmienić nazwę zmiennej na ciąg znaków; tylko żeby otrzymać nazwę zmiennej w runtime'ie. Chciałbyś wyjaśnić po co Ci taka operacja? Bo to również jest meta programming który raczej jest średnim podejściem, i to również dałoby się ogarnąć słownikiem.

Zdradź więcej informacji - co próbujesz dokładnie zrobić?

0
Riddle napisał(a):
gabus napisał(a):

Niech mamy:var Common=new Array();, chciałbym coś zrobić w rodzaju var c=Object(Common).toString(), powinniiśmy otrzymać ciąg "Common", ale tutaj nie wychodzi, wychodzi ciąg pusty. Pytanie co zrobić, by otrzymać ten ciąg?

Czyli źle zadałeś pytanie, bo nie chodzi Ci o to żeby zmienić nazwę zmiennej na ciąg znaków; tylko żeby otrzymać nazwę zmiennej w runtime'ie. Chciałbyś wyjaśnić po co Ci taka operacja? Bo to również jest meta programming który raczej jest średnim podejściem, i to również dałoby się ogarnąć słownikiem.

Zdradź więcej informacji - co próbujesz dokładnie zrobić?

Chciałbym wstawić te zmienne do funkcji zapisane tekstem, a później je uruchomić funkcją eval. Liczba zmiennych byłaby zależna od pewnej funkcji składowej danej funkcji.

1
gabus napisał(a):

Chciałbym wstawić te zmienne do funkcji zapisane tekstem, a później je uruchomić funkcją eval. Liczba zmiennych byłaby zależna od pewnej funkcji składowej danej funkcji.

A nie możesz po prostu przekazać listy lub słownika?

Bo zwrócenie nazw zmiennych, po to żeby później zrobić na nich eval() to mega słabe.

0

Ale jak to ma działać? Jeśli zmienne będą w funkcji to eval i tak ich nie będzie widział.

0

Po zamianie pojedynczej zmiennej na obiekt

const name = "jakaś nazwa";

const dict = {
  name,
};

wystarczy odczytać nazwę naszej właściwości

console.log(Object.keys(dict)); // ['name']
console.dir(Object.keys({ name })); // ['name']

for (const key in dict) {
  console.log(key); // name
}

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in

2

Chciałbym wstawić te zmienne do funkcji zapisane tekstem, a później je uruchomić funkcją eval. Liczba zmiennych byłaby zależna od pewnej funkcji składowej danej funkcji.

Ale... po co chcesz je uruchomić funkcją eval? Powiedz to wreszcie głośno. Bo to nie jest normalne, żeby w ogóle używać tej funkcji.

Używanie eval to w 99,999% bardzo słaby pomysł.
(na tej stronie masz też pokazane alternatywy).

Nieliczne są przypadki, gdzie w ogóle tego potrzebujesz (chyba tylko jakbyś robił sandboks do kodu albo narzędzie, które podmienia kod w locie(livereloading)). Poza tymi dwoma przypadkami, to nie wiem, czy istnieją jakieś inne kejsy, gdzie eval mógłby się przydać (i nie, robienie np. kalkulatora to nie jest dobre uzasadnienie dla evala)

0

Nie znam się na JS ale JS ma coś innego niż runtime? Przecież tego się nie kompiluje?

0

A Tobie nie chodzi o Object.getOwnPropertyNames();? Kiedyś się tym bawiłem, jak dawałem na window.top to zamulało kompa. Ale działa.

0
var Nazwa = "Przyklad";
var Wartosc = 42;
window[Nazwa] = Wartosc;
// Teraz zmienna Przyklad ma wartość 42.
var NowaNazwa = "NowyPrzyklad";
window[NowaNazwa] = window[Nazwa];
window[Nazwa] = undefined;
// Teraz zmienna NowyPrzyklad ma tę samą wartość 42, a zmiennej Przyklad nie ma.

Przy czym rzeczywiście ponownie przemyśl zasadę działania programu, czy naprawdę cos takiego jest potrzebne.

1 użytkowników online, w tym zalogowanych: 0, gości: 1