Haze: Javascript check :)

hi leute :)
fang grad mit javascript an aber irgendwie happerts
kann mir jemand sagen was an dem code falsch ist will nur wenn eins von den beiden größer ist das etwas ausgegeben wird.

var pos=12;
var one=0;
var finished=pos-one;
var wrong="falsch neuer versuch";

if (one<pos);
{document.write(finished);
}else {
document.write(wrong)
}

  1. Hi,

    if (one<pos);

    Ein Semikolon steht für das Ende eines Statements.
    Das was du da hast ist quasi: "Wenn der Wert von one kleiner als der von pos ist mache nichts"

    {document.write(finished);

    Dann kommt eine geschweifte Klammer, das führt zu einem Syntax-Error.
    (Diesen Syntax-Error sagt dir auch die Fehlerkonsole deines Browsers)

    }else {
    document.write(wrong)
    }

    Der Rest wird aufgrund des unbehandelten Fehlers nicht mehr ausgeführt

    ~dave

    1. Danke dir von php zu javascript ist doch bisschen gemein. :=)

      1. var one = 10;
        var two = 5;
        var yes = allright;
        var nope = nothing goes on;

        if (one>two) {
           document.write(yes)
        } else {
           document.write(nope)
        }

        Also so müsste das ja tun? ich bekomm keine anzeige in firefox.
        stimmt da was mit meinem firefox nicht oder ist das script einfach schwach?

        1. Hallo Haze,

          du solltest allmählich anfangen, dich mit den Basics zu beschäftigen. Außerdem gibt es im FF und auch in anderen Browsern eine Javascript- oder Fehlerkonsole.

          var yes = allright;

          hier legst du eine Variable yes an und weist ihr den Wert der Variablen allright zu. Willst du das wirklich und wo ist allright definiert?

          oder meinst du

          var yes = "allright";

          var nope = nothing goes on;

          dito.

          Gruß, Jürgen

          1. @@JürgenB:

            nuqneH

            var nope = nothing goes on;

            dito.

            Nicht ganz dito, denn das ist syntaktisch falsch.

            Qapla'

            --
            Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
            (Mark Twain)
            1. heyjo ich hab da ein neues problem :)

              ich habe ein array:

              var a = [1,2,3,4,5,];
                a[1] ="....";
                a[2] ="....";
                a[3] ="....";
                a[4] =".....";

              kann mir jemand sagen wie ich es hinbekomme von a[1] die farbe zu ändern?
              ich kann von der variable a die farbe ändern aber bekomme es nicht hin von
              den einzelnen bereichen die Farbe zu ändern.

              Für hilfe gibt es ein Dankeschön :)

              1. [latex]Mae  govannen![/latex]

                ich habe ein array:
                var a = [1,2,3,4,5,];

                Ein Array mit 6 Elementen, das Letzte davon nicht definiert.

                a[1] ="....";

                überschreibt den Wert 2, das Array sieht nun folgendermaßen aus:

                var a = [1,"....",3,4,5,];

                a[2] ="....";

                und jetzt

                var a = [1,"....","....",4,5,];

                a[3] ="....";
                  a[4] =".....";

                usw.

                Ist das so gewollt (Ich rede nicht von den Punkten, daß die für irgendwelche Werte stehen sollen, ist klar)? Was genau willst du erreichen? Wie soll es nachher aussehen?

                kann mir jemand sagen wie ich es hinbekomme von a[1] die farbe zu ändern?

                gar nicht, Array-Einträge haben keine Farbe )

                ich kann von der variable a die farbe ändern aber bekomme es nicht hin von
                den einzelnen bereichen die Farbe zu ändern.

                ??

                Stur lächeln und winken, Männer!
                Kai

                --
                Dank Hixies Idiotenbande geschieht grade eben wieder ein Umdenken
                in Richtung "Mess up the Web".(suit)
                SelfHTML-Forum-Stylesheet
                1. ok :)
                           0 1 2 3 4 das erste ist immer 0.
                  var a = [1,2,3,4,5,];
                   a[0] = "hallo";
                   a[1] = "wie";
                   a[2] = "geht";
                   a[3] = "es";
                   a[4] = "dir?";

                  Ich hätte gern das ich die variablen also a[0] eine einzelne farbe zuweise,
                  und dann a[1] eine andere.

                  Das ich am Ende mit document.write(a) einen bunten Text bekomme.

                  Tut mir leid wegen der 1 im letzten habe ich mich verschrieben.

                  1. weiß keiner was? :( schade, such schon den ganzen tag wie blöd.

              2. @@Haze:

                nuqneH

                ich habe ein array:
                --8<--
                kann mir jemand sagen wie ich es hinbekomme von a[1] die farbe zu ändern?

                Array-Elemente haben selte eine Farbe. Elementobjekte haben im style-Unterobjekt Eigenschaften, die den CSS-Eigenschaften entsprechen. Sind in deinem Array denn Elementobjekte?

                Qapla'

                --
                Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
                (Mark Twain)
                1. ja solche elementobjekte sind vorhanden,

                  ich habe die schrift in einem div container zwischen einem span tag platziert.
                  Dort ist es mir möglich die Farbe für das array zu ändern.

                  <span id="text"><font color="#FF0000">'+a+'</font></span>'

                  wenn ich hier jetzt das +a+ durch ein a[0] (erster Wert im array einsetze,
                  Wird mir lediglich der eine satz ausgegeben. Nun habe ich versucht einfach
                  alle Werte in dieses Span Tag zu platzieren mit ++ sprich

                  <span id="text"><font color="#FF0000">'+a[0]+'</font>
                  <font color="#FF0000">'+a[0]+'</font>
                  <font color="#000000">'+a[1]+'</font>
                  <font color="#123456">'+a[2]+'</font>
                  <font color="#ff9900">'+a[3]+'</font></span>'

                  Aber ich bekomme keine Ausgabe, bzw ich denk das, das letzte das erste überschreibt aber ich bin mir nicht sicher.

                  1. Gunnar Bittersmann

                    dank dir, U MADE MY DAY. :)

                    ich muss an die Syntax denken und muss alles hintereinander schreiben.
                    Danke für den Denkanstoß. das kann ja so gar nicht funktionieren. :)

                    DANKE

          2. es scheint ein unterschied zu geben zwischen "alright"; und allright;?
            hm wusst ich nicht. Wollte doch nur das allright ausgegeben wird wenn one>two ist.

            ich hätte gemeint das ich die variable yes mit allright definiert hätte.

            Also var yes =allright;

            ok danke für eure hilfe :)

            Jetzt weiß ich ja woran es liegt und werde daran arbeiten.

            danke

            1. @@Haze:

              nuqneH

              es scheint ein unterschied zu geben zwischen "alright"; und allright;?
              hm wusst ich nicht.

              Ähm, solltest du den nicht von PHP kennen? BTW, dort gibt es sogar einen Unterschied zwischen "alright" und 'alright'.

              Qapla'

              --
              Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
              (Mark Twain)
              1. ja der unterschied ist mir bewusst.

                ich meine aber das, es doch egal ist ob ich "allright"; oder einfach nur allright; schreibe da ja nichts anderes mehr dasteht wenn ich schreiben würde

                var one = Es ist alles "allright"; oder Es ist alles 'allright'; dann ja aber es soll nur allright; stehen. das müsste doch verständlich sein.

                1. Hi!

                  ich meine aber das, es doch egal ist ob ich "allright"; oder einfach nur allright; schreibe da ja nichts anderes mehr dasteht wenn ich schreiben würde

                  Lies mal den Anfang vom Kontextwechsel-Artikel. Sag mir nun, wie man wörtliche Rede eindeutig von Handlung unterscheiden soll, wenn nicht durch Einrahmung mit Anführungszeichen. Und dann sag mir, wie ein Rechner erkennen soll, ob du einen Text oder ein anderes Syntaxelement meinst, wenn nicht durch Einrahmung mit Anführungszeichen.

                  Lo!

                  1. Und dann sag mir, wie ein Rechner erkennen soll, ob du einen Text oder ein anderes Syntaxelement meinst, wenn nicht durch Einrahmung mit Anführungszeichen.

                    Indem man eine Ausnahme einführt: ein einzelnes Wort ist auch ohne Anführungszeichen Text. Präzedenz sehen wir in Shell und Perl (sowohl als Zuweisungswert, zugegebenermaßen für Programme mit niedrigem Wert auf der Manipulexitätsordinate, als auch als Hashschlüssel). Das ist beabsichtigt und funktioniert ganz gut¹, passt ins Vorstellungsmodell von Programmierern wie dem OP, denen noch nicht der Kopf von Dogmen zuzementiert wurde.

                    ¹ … weil Variablennamen mit Sigiln behaftet sind; leider ein Schwachpunkt im Design von JavaScript, das sich von den Regeln für Bezeichner in C inspirieren ließ.

                    1. Hi!

                      Und dann sag mir, wie ein Rechner erkennen soll, ob du einen Text oder ein anderes Syntaxelement meinst, wenn nicht durch Einrahmung mit Anführungszeichen. Präzedenz sehen wir in Shell und Perl (sowohl als Zuweisungswert, zugegebenermaßen für Programme mit niedrigem Wert auf der Manipulexitätsordinate, als auch als Hashschlüssel).
                      Indem man eine Ausnahme einführt: ein einzelnes Wort ist auch ohne Anführungszeichen Text.

                      OK, gibts es ja teilweise auch in PHP. Array-Schlüssel, die nicht in Anführungszeichen stehen, werden erstmal als Konstante angesehen und wenn es keien mit diesem namen gibt, als String.

                      Das ist beabsichtigt und funktioniert ganz gut¹, passt ins Vorstellungsmodell von Programmierern wie dem OP, denen noch nicht der Kopf von Dogmen zuzementiert wurde.

                      Ja, aber wie du schon sagst, ist es nicht sonderlich nützlich, wenn es komplexer wird. Man müsste dann aber immer höllisch aufpassen, da aus einem als String gemeinten Wort schnell mal eine Variable werden kann, wenn man eine mit diesem Namen einführt. Andererseits ist jeder Vertipper kein Fehler mehr, der angezeigt werden könnte, sondern stillschweigend ein String. Würde man sowas trotzdem mit einer Fehler-/Hinweismeldung ahnden, würde man als Programierer diese entweder ausschalten, weil sie für größtenteils beabsichtigten Anwendungen falsch ist. Die eine Meldung bei unbebsichtigter Anwendung ist dann nicht mehr zu sehen oder geht im Wust der anderen unter, wenn man die Warnungen anzeigen lässt. Da ist das Dogma "setze alle Strings in Anführungszeichen" doch die wesentlich einfachere und sinnvollere Vorgehensweise. Das Prinzip hat sich zurecht nicht in Sprachen durchgesetzt, die gewöhnlicherweise auch für komplexe Dinge verwendet werden.

                      Lo!

            2. Hallo Haze,

              es scheint ein unterschied zu geben zwischen "alright"; und allright;?

              ich kann mich nur wiederholen: lerne die Basics. Viel elemantarer als der Unterschied zwischen Variable und Stringkonstante geht es nicht mehr.

              Gruß, Jürgen

          3. Hi,

            oder meinst du
            var yes = "allright";

            Nein, eher

            var yes = "alright";

            ;-)

            cu,
            Andreas

            --
            Warum nennt sich Andreas hier MudGuard?
            O o ostern ...
            Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
        2. @@Haze:

          nuqneH

          Also so müsste das ja tun? ich bekomm keine anzeige in firefox.

          Ich schon. Eine Fehler-. (Konsole im Firebug)

          Qapla'

          --
          Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
          (Mark Twain)
      2. Om nah hoo pez nyeetz, Haze!

        von php zu javascript ist doch bisschen gemein. :=)

        auch in php steht nach if ($foo < $bar) kein Semikolon.

        Matthias

        --
        1/z ist kein Blatt Papier. http://www.billiger-im-urlaub.de/kreis_sw.gif
      3. Mahlzeit Haze,

        Danke dir von php zu javascript ist doch bisschen gemein. :=)

        Es täte mich doch schon sehr wundern, wenn in PHP eine Syntax wie

        if ($foo > $bar);

        wie von Dir gewünscht funktionierte ...

        MfG,
        EKKi

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
        1. ja ok, ähm. ok. ähm. ok.

          und ja ok. ähm. ok.

    2. Hi,

      Dann kommt eine geschweifte Klammer, das führt zu einem Syntax-Error.

      Warum sollte es?

      Erst das else, zu dem es kein if gibt, sollte einen Syntax-Fehler ergeben.

      cu,
      Andreas

      --
      Warum nennt sich Andreas hier MudGuard?
      O o ostern ...
      Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
      1. Hi,

        Erst das else, zu dem es kein if gibt, sollte einen Syntax-Fehler ergeben.

        Ich bin eine schlechte Javascript-Engine :´(

        ~dave

    3. {document.write(finished);

      Dann kommt eine geschweifte Klammer, das führt zu einem Syntax-Error.

      Nein, das ist ein Block. Ein Block kann auch einfach so ohne if/while/for auftauchen.

      {
         'ein Block';
         'mit mehreren Anweisungen';
         'Expression Statements, um genau zu sein';
      }

      Wie gesagt, erst das else stößt dem Parser auf.

      Mathias

      1. Hi,

        gibt's dafür eigentlich auch einen Anwendungsfall?

        ~dave

        1. Hi,

          gibt's dafür eigentlich auch einen Anwendungsfall?

          Bei Javascript fällt mir höchstens ein, daß man zu Testzwecken mal die Zeile mit dem if/Schleifenkopf auskommentiert, und die Klammern nicht extra wegnehmen muß:

            
          //if (a > b)  
          {  
            alert(a);  
            alert(b);  
          }  
          
          

          In anderen Sprachen (Java z.B.) gibt es durchaus weitere Gründe für solche Blöcke:
          da begrenzt der Block die Lebensdauer der darin deklarierten/definierten Variablen.

          cu,
          Andreas

          --
          Warum nennt sich Andreas hier MudGuard?
          O o ostern ...
          Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
          1. Hi,

            In anderen Sprachen (Java z.B.) gibt es durchaus weitere Gründe für solche Blöcke:
            da begrenzt der Block die Lebensdauer der darin deklarierten/definierten Variablen.

            Weitergehend am Beispiel Perl: man kann Variablenwerte in solchen Blöcken lokalisieren:

            $var = 0;  
            {  
              print $var; # gibt 0 aus  
              local $var = 1;  
              print $var; # gibt 1 aus  
            }  
            print $var; # gibt 0 aus  
            
            

            Auch kann man mit "last" aus einem solchen Block herausspringen, folgender Code macht also nichts:

            {  
            	last;  
            	print 1;  
            }
            

            Das fiele mir so auf Anhieb ein, nichts davon benutzt man wirklich regelmäßig. Ersteres wäre ganz praktisch, um kurzzeitig Variablen zu ändern und sich sicher zu sein, dass die Änderungen lokal bleiben. Allerdings funktioniert es nicht mit lexikalischen Variablen (das sind die mit "my" deklarierten), weswegen es bei mir meistens durch Benutzung des strict-Pragmas hinfällig wird.
            Bis die Tage,
            Matti

            1. kurzzeitig Variablen zu ändern […] Allerdings funktioniert es nicht mit lexikalischen Variablen

              Humbug.

                
                  $ perl -E'use strictures; my $f = 1; say $f; { my $f = 2; say $f; } say $f'  
                  1  
                  2  
                  1  
              
              
              1. Hi,

                kurzzeitig Variablen zu ändern […] Allerdings funktioniert es nicht mit lexikalischen Variablen
                Humbug.

                Deinen Codeschnippsel akzeptiere ich als Gegenbeispiel.

                Allerdings übersieht deine radikale Kürzung meines Postings, dass ich mich auf local bezog. Und da gibt es ja doch noch andere Unterschiede. Mit my angelegte Variablen sind neu (was leicht sichtbar ist, wenn du die Variable mal nicht initialisierst). Mit local lokalisierte Variablen sind die alten. D.h. ich kann zu Beginn eines Codeblocks Variablen vorsorglich als lokal deklarieren und kann erstmal mit dem alten Wert weiterarbeiten.

                Bis die Tage,
                Matti

        2. @@dave:

          nuqneH

          gibt's dafür eigentlich auch einen Anwendungsfall?

          Ja, das wird in OpenSG gern verwendet: Sowas wie

          beginEditCP(planetTransformNode, Node::CoreFieldMask | Node::ChildrenFieldMask);  
          planetTransformNode->setCore(planetTransform);  
          planetTransformNode->addChild(planet);  
          endEditCP(planetTransformNode, Node::CoreFieldMask | Node::ChildrenFieldMask);
          

          schreibt man der Übersichtlichkeit wegen besser mit Einrückung:

          beginEditCP(planetTransformNode, Node::CoreFieldMask | Node::ChildrenFieldMask);  
            planetTransformNode->setCore(planetTransform);  
            planetTransformNode->addChild(planet);  
          endEditCP(planetTransformNode, Node::CoreFieldMask | Node::ChildrenFieldMask);
          

          Nun würden aber IDEs die Einrückung beim Formatieren des Codes wieder wegmachen; deshalb setzt man das in einen {}-Block:

          beginEditCP(planetTransformNode, Node::CoreFieldMask | Node::ChildrenFieldMask);  
          {  
            planetTransformNode->setCore(planetTransform);  
            planetTransformNode->addChild(planet);  
          }  
          endEditCP(planetTransformNode, Node::CoreFieldMask | Node::ChildrenFieldMask);
          

          Qapla'

          --
          Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
          (Mark Twain)
          1. Om nah hoo pez nyeetz, Gunnar Bittersmann!

            ich hab mich schon immer gefragt, wie die das machen. ;-)

            beginEditCP([planetTransform](http://de.memory-alpha.org/wiki/Terraforming)Node, Node::CoreFieldMask | Node::ChildrenFieldMask);
            {
               planetTransformNode->setCore(planetTransform);
               planetTransformNode->addChild(planet);
            }
            endEditCP(planetTransformNode, Node::CoreFieldMask | Node::ChildrenFieldMask);
            

            Matthias

            --
            1/z ist kein Blatt Papier. http://www.billiger-im-urlaub.de/kreis_sw.gif