NEWS
Frage zu Array Konstante
-
Hi Leute,
ich bräuchte mal ein bißchen Nachhilfe in Sachen Arrays. Die sind ja in JS kein "normaler" Datentyp, sondern eine Art spezielles Objekt?
Ich bin gerade dabei ein Skript für eine RGB-Lampe zu bauen. Da das Modul 'color-convert' verwendet wird, deren Funktionen Arrays zurückgeben, sollen die drei Grundfarben in ein Array gepackt werden. Für die Farbe Weiß wurde eine Array-Konstante erstellt. Lieder blieb diese nicht konstant, sondern nahm den Wert einer Array-Variablen an.Hier mal ein kleines Beispiel:
const RGB_C = [200, 200, 200]; let RGB_V = RGB_C; log('RGB_C = ' + String(RGB_C)); log('RGB_V = ' + String(RGB_V)); RGB_V = [100, 100, 100]; log('Test 1 ------------------'); log('RGB_C = ' + String(RGB_C)); log('RGB_V = ' + String(RGB_V)); let Green = RGB_V[1]; Green -= 50; RGB_V[1] = Green; log('Test 2 ------------------'); log('RGB_C = ' + String(RGB_C)); log('RGB_V = ' + String(RGB_V));
Dazu das Log:
2020-09-15 22:19:15.292 - info: javascript.0 (19213) script.js.Test.#Test_JS: RGB_C = 200,200,200 2020-09-15 22:19:15.292 - info: javascript.0 (19213) script.js.Test.#Test_JS: RGB_V = 200,200,200 2020-09-15 22:19:15.293 - info: javascript.0 (19213) script.js.Test.#Test_JS: Test 1 ------------------ 2020-09-15 22:19:15.293 - info: javascript.0 (19213) script.js.Test.#Test_JS: RGB_C = 200,200,200 2020-09-15 22:19:15.293 - info: javascript.0 (19213) script.js.Test.#Test_JS: RGB_V = 100,100,100 2020-09-15 22:19:15.294 - info: javascript.0 (19213) script.js.Test.#Test_JS: Test 2 ------------------ 2020-09-15 22:19:15.294 - info: javascript.0 (19213) script.js.Test.#Test_JS: RGB_C = 200,200,200 2020-09-15 22:19:15.295 - info: javascript.0 (19213) script.js.Test.#Test_JS: RGB_V = 100,50,100
Soweit alles gut. Nun wird Zeile 6 herauskommentiert:
const RGB_C = [200, 200, 200]; let RGB_V = RGB_C; log('RGB_C = ' + String(RGB_C)); log('RGB_V = ' + String(RGB_V)); //RGB_V = [100, 100, 100]; log('Test 1 ------------------'); log('RGB_C = ' + String(RGB_C)); log('RGB_V = ' + String(RGB_V)); let Green = RGB_V[1]; Green -= 50; RGB_V[1] = Green; log('Test 2 ------------------'); log('RGB_C = ' + String(RGB_C)); log('RGB_V = ' + String(RGB_V));
Und das Log:
2020-09-15 22:21:11.188 - info: javascript.0 (19213) script.js.Test.#Test_JS: RGB_C = 200,200,200 2020-09-15 22:21:11.189 - info: javascript.0 (19213) script.js.Test.#Test_JS: RGB_V = 200,200,200 2020-09-15 22:21:11.189 - info: javascript.0 (19213) script.js.Test.#Test_JS: Test 1 ------------------ 2020-09-15 22:21:11.190 - info: javascript.0 (19213) script.js.Test.#Test_JS: RGB_C = 200,200,200 2020-09-15 22:21:11.190 - info: javascript.0 (19213) script.js.Test.#Test_JS: RGB_V = 200,200,200 2020-09-15 22:21:11.190 - info: javascript.0 (19213) script.js.Test.#Test_JS: Test 2 ------------------ 2020-09-15 22:21:11.191 - info: javascript.0 (19213) script.js.Test.#Test_JS: RGB_C = 200,150,200 2020-09-15 22:21:11.191 - info: javascript.0 (19213) script.js.Test.#Test_JS: RGB_V = 200,150,200
Kann mir mal jemand erklären, warum die Konstante RGB_C nach Test 2 sich geändert hat und den gleichen Wert wie die Variable RGB_V hat?
Warum passiert dies nicht, wenn Zeile 6 nicht auskommentiert ist?
Was passiert eigentlich in Zeile 2? Wird da ein Wert übergeben oder eine Referenz? -
@pk68 sagte:
Was passiert eigentlich in Zeile 2? Wird da ein Wert übergeben oder eine Referenz?
Es wird eine Referenz übergeben. Zeile 6 ersetzt die Referenz durch eine neue.
-
@paul53 sagte in Frage zu Array Konstante:
Es wird eine Referenz übergeben. Zeile 6 ersetzt die Referenz durch eine neue.
Danke. Das erklärt natürlich die Merkwürdigkeiten.
Wie müsste man den richtigerweise eine Wertübergabe zwischen Arrays machen? In einer For-Schleife jeden Wert einzeln? -
-
@paul53 sagte in Frage zu Array Konstante:
Ja, oder mit .slice().
Habe gerade slice in das Beispiel eingebaut und schon läuft es. Besten Dank.