HolySheepy: Variablentyp überprüfen

Hi,

wie überprüfe ich in JavaScript am besten den "Typ" einer Variable?
Also ob nummerisch oder alphanummerisch

  1. Hi,

    wie überprüfe ich in JavaScript am besten den "Typ" einer Variable?

    mittels typeof.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hi,

      wie überprüfe ich in JavaScript am besten den "Typ" einer Variable?

      mittels typeof.

      Cheatah

      Hm, funktioniert das dann auch so wie ich will?

      Also wenn ich nen String(!) habe mit "452" müsste es trotzdem Number sein :p Weil es eben nummerisch ist...

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

        wie überprüfe ich in JavaScript am besten den "Typ" einer Variable?

        mittels typeof.

        Hm, funktioniert das dann auch so wie ich will?

        Also wenn ich nen String(!) habe mit "452" müsste es trotzdem Number sein :p Weil es eben nummerisch ist...

        Nein. Ein String ist ein String ist ein Tang^WString. Was darin steht, ist nicht wichtig, es bleibt ein String. Wernn du wissen willst, mußt du wohl über reguläre Ausrücke testen, ob ein String z.B. nur Ziffern/nur Buchstaben/whatever enthält.

        Cü,

        Kai

        --
        YouTube Video-Tipp: Harmonic Curves
        YouTube Video-Tipp: Pipe Dreams
        selfcode sh:( fo:| ch:? rl:( br:< n4:# ie:{ mo:| va:) js:) de:> zu:) fl:( ss:| ls:?
      2. Hi,

        Also wenn ich nen String(!) habe mit "452" müsste es trotzdem Number sein :p Weil es eben nummerisch ist...

        nein, ist es nicht - siehe Kais Antwort. Statt regulärer Ausdrücke kannst Du Dich aber Funktionen wie parseInt() bedienen.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. @@Cheatah:

          Statt regulärer Ausdrücke kannst Du Dich aber Funktionen wie parseInt() bedienen.

          Mir käme !isNaN() in den Sinn.

          Live long and prosper,
          Gunnar

          --
          Erwebsregel 208: Manchmal ist das einzige, was gefährlicher als eine Frage ist, eine Antwort.
          1. gruss in die runde,

            Mir käme !isNaN() in den Sinn.

            und ich wuerde den typ vorher noch
            zwangskonvertieren und zusaetzlich
            auf seine endlichkeit ueberpruefen:

            var isKindOfNumber = (function (obj) {  
              
              obj = Number(obj);  
              
              return (!isNaN(obj) && isFinite(obj));  
            });
            

            so long - peterS. - pseliger@gmx.net

            --
            »Because objects in JavaScript are so flexible, you will want to think differently about class hierarchies.
            Deep hierarchies are inappropriate. Shallow hierarchies are efficient and expressive.« - Douglas Crockford
            ie:( fl:) br:> va:( ls:& fo:) rl:) n3;} n4:} ss:} de:µ js:} mo:? zu:]
        2. nein, ist es nicht - siehe Kais Antwort. Statt regulärer Ausdrücke kannst Du Dich aber Funktionen wie parseInt() bedienen.

          Erwischt er damit nicht auch Strings, die keine Zahlen sind? So wie "500xx" beispielsweise? Ich weiß nicht, ob das gewünscht ist (dem Wortlaut nach eher nicht).

          --
          Reden ist Silber, Schweigen ist Gold, meine Ausführungen sind Platin.
          Self-Code: sh:( ch:? rl:( br:> n4:( ie:{ mo:) va:) de:> zu:} fl:| ss:| ls:~ js:|
      3. hallo,

        Also wenn ich nen String(!) habe mit "452" müsste es trotzdem Number sein :p Weil es eben nummerisch ist...

        ich habe mir mal vor einiger zeit für ein problemchen das (glaube ich) in eine ähnliche richtung geht, folgendes funktiönchen gemacht:

          
        String.prototype.isNumber = function ()  
        {  
        var l,lm,re;  
        re = /\d/g;  
        l = this.length;  
        lm = (this.match(re)) ?this.match(re).length :-1;  
        return (l==lm) ?true :false;  
        }  
        
        

        hat den horizont einer lokalen anwendung allerdings nie verlassen und ist deshalb ohne gewähr zu verwenden.

        gruß,

        pd

        1. @@pother_dane:

          ist deshalb ohne gewähr zu verwenden.

          Besser gar nicht:

          var l,lm,re;
          re = /\d/g;
          l = this.length;
          lm = (this.match(re)) ?this.match(re).length :-1;

          Wozu das Ganze? Wenn du schon einen regulären Ausdruck bemühst, solltest du '^' und '$' kennen und anwenden.

          return (l==lm) ?true :false;

          Wozu? l == lm ist doch ein Boolescher Ausdruck mit eben dem Wahrheitswert, der zurückgegeben werden soll. Also:

          return (l == lm);

          Aber wozu das das Rad neu erfinden?

          Live long and prosper,
          Gunnar

          --
          Erwebsregel 208: Manchmal ist das einzige, was gefährlicher als eine Frage ist, eine Antwort.
          1. hallo,

            nie hätte ich behaupten wollen, meine lösung sei die ausgereifteste. ich wollte nur auch mal aus der lesenden passivität heraustreten und etwas beitragen. und hierfür:

            return (l==lm) ?true :false;

            Wozu? l == lm ist doch ein Boolescher Ausdruck mit eben dem Wahrheitswert, der zurückgegeben werden soll. Also:

            return (l == lm);

            schäme ich mich sogar ein wenig. wie doof, aber ehrlich!

            dass isNaN() auch strings wie gewünscht verarbeitet wusste ich schlicht nicht, sonst hätte ich mir den "spass" mit dem funktiönchen tatsächlich gespart. my bad!

            anhänglichst noch eine frage:

            Wozu das Ganze? Wenn du schon einen regulären Ausdruck bemühst, solltest du '^' und '$' kennen und anwenden.

            mir mag nicht so recht einfallen, wozu ich in diesem kontext '^' und '$' brauchen könnte.

            herzlichst,

            pd

            1. @@pother_dane:

              mir mag nicht so recht einfallen, wozu ich in diesem kontext '^' und '$' brauchen könnte.

              Wolltest du nicht testen, ob der String von _Anfang_ bis _Ende_ aus Ziffern (und ggfs. Dezimaltrennzeichen und Vorzeichen) besteht?

              Live long and prosper,
              Gunnar

              --
              Erwebsregel 208: Manchmal ist das einzige, was gefährlicher als eine Frage ist, eine Antwort.
              1. @@gunnar:

                Wolltest du nicht testen, ob der String von _Anfang_ bis _Ende_ aus Ziffern (und ggfs. Dezimaltrennzeichen und Vorzeichen) besteht?

                ja, das war mein anliegen mit dieser funktion/methode. mag sein, dass '^' und '$' zu einem eleganteren ergebnis führen, meine überlegung war aber: wenn die länge des strings und die länge der von .match() zurückgegebenen liste an gefundenen zahlen identisch sind, dann besteht der string ausschließlich aus zahlen. warum dann noch anfang und ende überprüfen?

                gruß

                pd

                1. @@pother_dane:

                  meine überlegung war aber: wenn die länge des strings und die länge der von .match() zurückgegebenen liste an gefundenen zahlen identisch sind, dann besteht der string ausschließlich aus zahlen. warum dann noch anfang und ende überprüfen?

                  Nein, andersrum: Wenn du auf ^\d+$ (bzw. [1]+$ o.ä.) prüfst, warum dann noch die Längen ermitteln und vergleichen?

                  Aber das nur zur allgemeinen Überlegung zum Umgang mit regulären Ausdrücken. Hier ist sowieso keiner angebracht.

                  Live long and prosper,
                  Gunnar

                  --
                  Erwebsregel 208: Manchmal ist das einzige, was gefährlicher als eine Frage ist, eine Antwort.

                  1. 0-9., ↩︎

                  1. @@gunnar

                    Nein, andersrum: Wenn du auf ^\d+$ (bzw. [1]+$ o.ä.) prüfst, warum dann noch die Längen ermitteln und vergleichen?

                    das leuchtet in der tat ein. ich muss wohl nochmal auf die schulbank.

                    Hier ist sowieso keiner angebracht.

                    copy, sir!

                    gruß

                    pd


                    1. 0-9., ↩︎

        2. Hi,

          hat den horizont einer lokalen anwendung allerdings nie verlassen und ist deshalb ohne gewähr zu verwenden.

          wenn ich es recht überblicke, wird das ganze (neben Gunnars Anmerkungen) auch bei Fließkommazahlen versagen.

          Cheatah

          --
          X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
          X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
          X-Will-Answer-Email: No
          X-Please-Search-Archive-First: Absolutely Yes