Alex: vergleich von 0 mit false und ""

hallo...

ich habe folgendes problem:
ein array belege ich mit allen werten mit "" vor oder mit false. dann habe ich verschieden id's unter anderem 0. wenn ich verlgeiche
if (arraywert == 0) trifft das ja immer zu. was kann ich als wertvorbelegung nehmen ausser false oder ""(leer), damit dieser vergleich wirklich nur zutrifft wenn das arrayelement auch 0 ist und nicht false oder leer??

gruss alex

  1. ein array belege ich mit allen werten mit "" vor oder mit false. dann habe ich verschieden id's unter anderem 0. wenn ich verlgeiche

    Eine ID die mit einer Zahl anfängt ist nicht erlaubt.

    Struppi.

    1. Eine ID die mit einer Zahl anfängt ist nicht erlaubt.

      wie darf ich das verstehen? warum nicht? ich habe die id's für ne funktion zum aufklappen von bildern genommen machauf(0)...machauf(10)...wieso ist das da nicht erlaubt? null hat sich angeboten, weil ja ein arry auch bei null anfängt

      1. Eine ID die mit einer Zahl anfängt ist nicht erlaubt.

        wie darf ich das verstehen? warum nicht? ich habe die id's für ne funktion zum aufklappen von bildern genommen machauf(0)...machauf(10)...wieso ist das da nicht erlaubt? null hat sich angeboten, weil ja ein arry auch bei null anfängt

        weil das so definiert ist. ID dürfen Zahlen und Buchstaben enthalten, daneben noch  ein oder zwei Sonderzeichen, dürfen aber nicht mit einer Zahl anfangen.

        Struppi.

        1. Hmmm...

          in klammern die zahl ist halt meine bildnummer, und wenn ich ne zahl >0 nehmen funktioniert das ja auch. müsste ich das da auch ändern?

          1. hi,

            in klammern die zahl ist halt meine bildnummer,

            dann hast du dich falsch ausgedrückt, und struppi hat dich beim wort genommen.
            eine ID ist in html etwas spezielles, nicht aber die "nummer" eines bildes.

            und wenn ich ne zahl >0 nehmen funktioniert das ja auch.

            wenn es "bei 0" nicht funktioniert, hast du wahrscheinlich einen - überraschung - fehler gemacht :-)
            aber ohne deinen code zu sehen, kann da keiner was näheres zu sagen.

            gruss,
            wahsaga

            1. hi,

              in klammern die zahl ist halt meine bildnummer,

              dann hast du dich falsch ausgedrückt, und struppi hat dich beim wort genommen.
              eine ID ist in html etwas spezielles, nicht aber die "nummer" eines bildes.

              Wenn es wirklich die id eines img Tags ist, dann ist eine Zahl als erstes Zeicen laut den Spezifkationen nicht erlaubt (ich find grad nicht die Quelle, weil ich mit den Dokumenten nicht so vertraut bin, vielleicht will jemand anderes)

              und wenn ich ne zahl >0 nehmen funktioniert das ja auch.

              wenn es "bei 0" nicht funktioniert, hast du wahrscheinlich einen - überraschung - fehler gemacht :-)
              aber ohne deinen code zu sehen, kann da keiner was näheres zu sagen.

              Naja, das Problem ist, das alert( "" == 0 ) bei mir zumindest auch, true ergibt.

              Struppi.

              1. Naja, das Problem ist, das alert( "" == 0 ) bei mir zumindest auch, true ergibt.

                genau das is der springende punkt. daher habe ich mir auch nen beliebigen wert ausgedacht wie ich das vorbelege ("leer"). leider weis ich im moment auch keine andere alternative.

                function init(){
                  for (i=0;i<=15;i++){
                 pruef[i]='leer';
                  }

                function showpic(id){

                if(pruef[id]==id) alert("Bild schon aufgedeckt!")

                usw. ...

                das sind die funktionen bzw. ausschnitte und wenn ich bei init() pruef[i]="" angebe hab ich das prob.

              2. hi,

                Wenn es wirklich die id eines img Tags ist, dann ist eine Zahl als erstes Zeicen laut den Spezifkationen nicht erlaubt

                da wollte ich dir ja gar nicht wiedersprechen - nur m.e. hat alex mit ID eben _nicht_ die ID gemeint, sondern die laufende nummer der bilder beim zugriff über document.images[].

                gruss,
                wahsaga

            2. Hi,

              Abschnitte habe ich im beitrag zu struppi

  2. Hallo Alex,

    ich habe folgendes problem:
    ein array belege ich mit allen werten mit "" vor oder mit false. dann habe ich verschieden id's unter anderem 0. wenn ich verlgeiche
    if (arraywert == 0) trifft das ja immer zu. was kann ich als wertvorbelegung nehmen ausser false oder ""(leer), damit dieser vergleich wirklich nur zutrifft wenn das arrayelement auch 0 ist und nicht false oder leer??

    In Programmiersprachen, die keine explizite Typdeklaration kennen, oder die Typen je nach Anforderung automatisch konvertieren, existiert zur Lösung solcher, eben dadurch auftretender, Probleme ein eigener Vergleichsoperator. In Javascript (und auch PHP, soweit ich weiß) ist das der Operator "===".
    Der Ausdruck (arraywert === 0) ist _nur_ true, wenn arraywert einen numerischen Wert 0 enthält.

    Vergleiche:

    <script type="text/javascript">
    <!--
    var arr = new Array();
    arr[0] = 1;
    arr[1] = 0;
    arr[2] = 2;
    arr[3] = null;
    arr[4] = false;
    arr[5] = "";

    for ( var i = 0; i<arr.length; i++) {
      alert("arr[i] ist: " +arr[i] + "\n" + "arr[i] == 0 ergibt: " + (arr[i] == 0) + "\n" + "arr[i] === 0 ergibt: " + (arr[i] === 0));
    }
    //-->
    </script>

    viele Grüße

    Axel

    PS: Bei ID-Attributen in HTML-Elementen hat Struppi natürlich recht.
    http://www.w3.org/TR/html4/types.html#h-6.2
    ID and NAME tokens must begin with a letter ([A-Za-z]) and may be followed by any number of letters, digits ([0-9]), hyphens ("-"), underscores ("_"), colons (":"), and periods (".").

  3. gruss alex,

    ... wenn ich verlgeiche if (arraywert == 0) trifft das
    ja immer zu. was kann ich als wertvorbelegung nehmen
    ausser false oder ""(leer), damit dieser vergleich
    wirklich nur zutrifft wenn das arrayelement auch 0 ist
    und nicht false oder leer??

    der einfache vergleichsoperator oder auch gleichheits-
       operator "==" nimmt eine typenkonvertierung auf der
       rechten operandenseite vor, wenn der gesamte ausdruck
       nicht sofort mit [true] validiert - deshalb sind folgende
       terme immer wahr: (0 == ""), (true == 1), (-1 == "-1"), ...

    der identitaets-operator "===" verlangt hingegen von
       beiden operanden gleiche typen und gleiche werte - die
       gerade angefuehrten beispiele saehen dann so aus:
       (0 === ""), (true === 1), (-1 === "-1"), - deren
       auswertung ergaebe [false];

    benutze in solchen faellen also immer den identitaets-
       operator;

    FYI - folgende in javascript nicht vorhandenen globalen
       funktionen koennen von den gerade gemachten ausfuehrungen
       abgeleitet werden:

    this.isUndefined = function(obj) {
         return (typeof(obj) == "undefined");
       };
       this.isNull = function(obj) {
         return ((typeof(obj) == "object") && (obj === null));
       };

    this.isNative = function(obj) { // returns true for every ECMA-object that is this global functions argument;
         return (!isUndefined(obj) && !isNull(obj) && (typeof(obj.constructor) == "function"));
       };

    this.isBoolean = function(obj) {
         return (isNative(obj) && (obj.constructor == Boolean));
       };
       this.isNumber = function(obj) {
         return (isNative(obj) && (obj.constructor == Number) && isFinite(obj));
       };
       this.isString = function(obj) {
         return (isNative(obj) && (obj.constructor == String));
       };

    viel erfolg und by(t)e by(t)e - peterS. - pseliger@gmx.net

    --
    sh:| fo:) ch:? rl:| br:& n3:} n4:# ie:| mo:{ va:| de:[ zu:] fl:) ss:) ls:& js:)