Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Frage zu Array Konstante

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Frage zu Array Konstante

    This topic has been deleted. Only users with topic management privileges can see it.
    • P
      pk68 last edited by pk68

      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?

      paul53 1 Reply Last reply Reply Quote 0
      • paul53
        paul53 @pk68 last edited by

        @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.

        P 1 Reply Last reply Reply Quote 0
        • P
          pk68 @paul53 last edited by

          @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 1 Reply Last reply Reply Quote 0
          • paul53
            paul53 @pk68 last edited by

            @pk68 sagte:

            In einer For-Schleife jeden Wert einzeln?

            Ja, oder mit .slice().

            P 1 Reply Last reply Reply Quote 0
            • P
              pk68 @paul53 last edited by

              @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.

              1 Reply Last reply Reply Quote 0
              • First post
                Last post

              Support us

              ioBroker
              Community Adapters
              Donate

              997
              Online

              31.8k
              Users

              80.0k
              Topics

              1.3m
              Posts

              2
              5
              234
              Loading More Posts
              • Oldest to Newest
              • Newest to Oldest
              • Most Votes
              Reply
              • Reply as topic
              Log in to reply
              Community
              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
              The ioBroker Community 2014-2023
              logo