22. februar 2017 - 19:05 Der er 2 kommentarer og
2 løsninger

Variable og henvisninger til variable

var v0 = 'a', v1 = v0;
v0 = 'b';
alert( v1 );

Jeg sætter en variabel v0 til værdien 'a'. Så sætter variablen v1 til at være det samme som v0, altså 'a'. Til sidst overskrives variablen v0 med værdien 'b'. Men desværre overskrives den variabel v1 der henviser til variablen v0 ikke.

Findes der en måde hvor man kan lave en 'dynamisk' henvisning til en anden variabel, så den også finder den nye værdi, hvis variablen er blevet ændret?

var v0 = 'a', v1 = 'v0';
v0 = 'b';
alert( eval( v1 ) );

Jeg ved, at man kan bruge eval, og det bliver måske også løsningen på mit problem, selvom det vist ikke er så velset at bruge den kodestump. Men findes der andre og bedre måder?
Avatar billede keysersoze Guru
23. februar 2017 - 14:45 #1
Først og fremmest bør din kode vel reelt se sådan ud

var v0 = 'a', v1 = v0;

Altså, medmindre du selvfølgelig netop vil benytte evil. eval....

I din situation er der ikke en direkte løsning og det skyldes at du arbejder med primitive typer. Skifter du til at arbejde med reference typer, fx et array, så vil det virker (copy/paste fra nettet);

var a = [1,2,3];
var b = a;
a[0] = 99;
alert(b); // = [99,2,3]

Så, uden at kende til hvad du overordnet forsøger at opnå, kunne det måske være et ide at lave et simpelt objekt og så bruge det til at referere til på v0.
Avatar billede keysersoze Guru
23. februar 2017 - 14:46 #2
* stavefejl er gratis, er ultra træt.
24. februar 2017 - 12:04 #3
For det første tak for svaret.

For det andet: Hvad er forskellen på det jeg skrev var v0 = 'a', v1 = v0; og det du skrev jeg burde lave min kode om til var v0 = 'a', v1 = v0;

For det tredje, så arbejdede jeg egentlig med et array, som jeg havde håbet at kunne udskifte i et snuptag med fx:
var a = [1,2,3], b = a;
a = [4,5,6];
alert(b);//= [1,2,3]

Men den går desværre ikke :(

Min løsning bliver desværre nok at genskabe forbindelsen mellem b og a efter at have skiftet hele arrayet ud, selvom det ikke er optimalt:
var a = [1,2,3], b = a;
a = [4,5,6];
b = a;//igen
alert(b);//= [4,5,6]

Endnu en gang tak for hjælpen.
Avatar billede keysersoze Guru
24. februar 2017 - 15:06 #4
sorry - jeg må have overset din kode øverst i spørgsmålet, jeg kiggede mest på anden del hvor du havde sat ' omkring v0 hvilket selvfølgelig netop er få at få eval til at fungere. Så bare glem den kommentar.

Grunden til at din kode med array ikke fungerer er, at du danner et nyt objekt og dermed går referencen tabt selvom du arbejder med en reference type. Hvis du derimod arbejder på det eksisterende objekt (som jeg gør i mit eksempel) vil det fungere efter hensigten. Hvis det af den ene eller anden grund ikke giver mening at gøre som i mit eksempel så lav dit egen objekt med dit array som en property, så burde det virke selvom du overskriver propertien.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester