Philemon08: Zusammengesetzte Variablenamen

Ich möchte die Variablen h1 und h2 bei unterschiedlichen Bedingungen ausgeben.
h1 Soll ausgegeben werden, wenn die Variable Zahl=1 ist! Bei h2 soll die Variable Zahl=2 sein (Wie die Variable Zahl zustande kommt, tut nichts zur Sache).
Mein Problem: Ich möchte nur folgendes schreiben:
alert(hz);
Dies soll dann jeweils den Inhalt h1 oder h2 ausgeben, je nachdem ob Zahl=1 oder 2 ist. Allerdings bekomme ich als Ausgabe bis jetzt nur "h1" oder "h2".

Hier ist der Code dazu:

<html>
<script>
var h1="Etwas"

var h2="Etwas anderes"

var hz=h+Zahl;
alert(hz);
</script>
</html>

  1. var h1="Etwas"

    var h2="Etwas anderes"

    var hz=h+Zahl;
    alert(hz);

    entweder ein Array:

    h=["Etwas","Etwas anderes"];  
    alert(h[z]); // wonbei z  0 oder 1 sein darf
    

    oder eine einfache Abfrage
    alert((z==1)?h1:h2);

    1. Das mit den Arrays und der Abfrage wäre eine Lösung, allerdings wäre eine Methode, die meiner ähnelt einfacher, da z mehr als 1000 Werte annehmen können soll.
      Für über Tausend Werte ein Array oder eine Abfrage zu schreiben währe etwas zu aufwendig.

      1. Hi,

        Für über Tausend Werte ein Array oder eine Abfrage zu schreiben währe etwas zu aufwendig.

        Für über Tausend Werte jeweils eine globale Variable anlegen halte ich für gefährlich.

        ~dave

        1. Ich brauchs aber trotzdem und die Abfrage funktioniert nur mit maximal 2 Variablen!

  2. Variable Variablen sind nie eine Gute idee - warum nimmst du nicht einfach ein Objekt oder ein Array?

    h = ['Etwas', 'Etwas anderes'];

    alert(h[Zahl]);

    Zu beachten ist hierbei, dass der index eines Arrays bei 0 zu zählen beginnt, sofern die Indizes nicht manuell vergeben wurden.

  3. hi,

    var hz=h+Zahl;

    das gibt den Wert von h + den Wert von Zahl, bzw. die Strings zusammen.

    Was du versuchst, aber definitiv bad practice ist ist

    hz = window["h" + Zahl];

    mfg

    tami

  4. @@Philemon08:

    nuqneH

    var hz=h+Zahl;

    Nein, dafür gibt es keinen Grund.

    Qapla'

    --
    Wer möchte nicht lieber durch Glück dümmer als durch Schaden klüger werden? (Salvador Dalí)
    1. Nein, dafür gibt es keinen Grund.

      Warum sollte der gegenwärtige Scope, der intern nichts anderes als eine Hashtabelle ist, dem Programm nicht zugänglich sein? Warum die Scope-Chain nicht sichtbar machen wie z.B. die Prototype-Chain? Wieso sollte man einen weiteren Array bzw. ein weiteren Hash erzeugen, wo man doch schon das Variablenobjekt besitzt?

      Im Übrigen bieten verschiedene Sprachen die Möglichkeit, auf das Variablenobjekt zuzugreifen. Beispielsweise local_variables und instance_variables usw. in Ruby. Dasselbe gilt für das programmatische Zusammenbauen von Variablennamen. Beispielsweise instance_variable_get, send, Binding usw. in Ruby. Es ist ein Defizit, dass das in ECMAScript nicht möglich ist.

      Mathias