henry: script-optimierung mit JSLint

hallo

ich versuche gerade einen javascript-code nach den vorgaben von www.jslint.com
zu optimieren. nun bin ich bei den letzten zwei "fehlern" hängengeblieben.

1.diese funktion:

function getPageOffsets(el){  
var left=el.offsetLeft;  
var top=el.offsetTop;  
if(el.offsetParent&&el.offsetParent.clientLeft||el.offsetParent.clientTop){  
left+=el.offsetParent.clientLeft;  
top+=el.offsetParent.clientTop;}  
while(el=el.offsetParent){  
left+=el.offsetLeft;  
top+=el.offsetTop;}  
return{x:left,y:top};}

gibt folgende meldung aus:
Problem at line 8 character 9: Expected a conditional expression and instead saw an assignment.
while(el=el.offsetParent){

müsste hier "while(el!=el.offsetParent)… geschrieben werden?

2. "eval is evil"… aber wie kann ich das besser machen?:

Implied eval is evil. Pass a function instead of a string.
dw_slidebar.aniTimer=setInterval("dw_slidebar.doSlide()",10);

mit dank für hilfe und grüsse
henry

  1. gibt folgende meldung aus:
    Problem at line 8 character 9: Expected a conditional expression and instead saw an assignment.

    Die halte ich Meldung für irrelevant. Der Punkt ist, er will da wohl unbedingt eine Bedingung, die aber durch die Zuweisung gegeben ist. Du könntest aber versuchen sie zu Klammern.

    1. "eval is evil"… aber wie kann ich das besser machen?:

    Implied eval is evil. Pass a function instead of a string.
    dw_slidebar.aniTimer=setInterval("dw_slidebar.doSlide()",10);

    dw_slidebar.aniTimer=setInterval(function() { dw_slidebar.doSlide();},10);

    Struppi.

    1. Die halte ich Meldung für irrelevant.

      Satzbau: sechs :-(

      Struppi.

      1. Hi,

        öchött, ja.

        Die halte ich Meldung für irrelevant.
        Satzbau: sechs :-(

        Bei dieser Satz scheint die Grammatik stimmt so ganz nicht, aber versteht man ihn trotzdem.

        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. hallo zusammen
          hier die antworten es kommt ja wie aus die pistole geschossen!

          thx a lot!

          müsste den in der while klammer nicht "==" stehen? (- dann meckert er nicht mehr…)

          gruss
          henry

          1. müsste den in der while klammer nicht "==" stehen? (- dann meckert er nicht mehr…)

            Kann ja, muss nicht.

            Hast du mal probiert ob er noch meckert, wenn du schreibst:

            while((el = el.offsetParent)) ...

            oder zur Not:

            while(null != (el = el.offsetParent)) ...

            Struppi.

            1. Hast du mal probiert ob er noch meckert, wenn du schreibst:

              while((el = el.offsetParent)) ...

              hallo struppi
              so gehts! – vielen dank!

              gruss
              henry

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

                Hast du mal probiert ob er noch meckert, wenn du schreibst:

                while((el = el.offsetParent)) ...

                hallo struppi
                so gehts! – vielen dank!

                Steht übrigens auch so auf der JSLint-Seite:

                JSLint does not expect to see an assignment statement in the condition part of an if or for or while or do statement. This is because it is more likely that
                if (a = b) {
                    ...
                }

                was intended to be
                if (a == b) {
                    ...
                }

                If you really intend an assignment, wrap it in another set of parens:
                if ((a = b)) {
                    ...
                }

                Cü,

                Kai

                --
                Ash nazg durbatulûk, ash nazg gimbatul,ash nazg thrakatulûk, agh burzum-ishi krimpatul
                selfcode sh:( fo:| ch:? rl:( br:< n4:# ie:{ mo:| va:) js:) de:> zu:) fl:( ss:| ls:?
                Mein Selfhtml-Kram
                1. Hi,

                  JSLint does not expect to see an assignment statement in the condition part of an if or for or while or do statement. This is because it is more likely that
                  if (a = b) {
                  was intended to be
                  if (a == b) {

                  If you really intend an assignment, wrap it in another set of parens:
                  if ((a = b)) {

                  Und das nur, um irgendeinen JavaScript-"Validator" zufriedenzustellen?

                  Also auf so einen Unfug wuerde ich glatt verzichten, und das Ding warnen lassen, wie es lustig ist.

                  MfG ChrisB

                  --
                  „This is the author's opinion, not necessarily that of Starbucks.“
                  1. [latex]Mae  govannen![/latex]

                    Und das nur, um irgendeinen JavaScript-"Validator" zufriedenzustellen?

                    Also auf so einen Unfug wuerde ich glatt verzichten, und das Ding warnen lassen, wie es lustig ist.

                    Diese Prüfung wurde WIMRE unter dem Aspekt eingeführt, daß es einer der beliebtesten Anfängerfehler ist, Vergleiche mit einfachem Gleichzeichen zu schreiben, insofern ist es durchaus nachvollziehbar, daß dieser potentielle Fehler angemerkt wird.
                    Da ein Programm aber nicht wissen kann, ob dies ein Fehler ist der nicht, wird durch die explizite Klammerung quasi gesagt "Ja, das ist so gewollt". Natürlich kann man mit dem entsprechenden Wissen solcherlei Warnungen einfach ignorieren (oder pragmatisch die Klammern setzen).

                    Cü,

                    Kai

                    --
                    Ash nazg durbatulûk, ash nazg gimbatul,ash nazg thrakatulûk, agh burzum-ishi krimpatul
                    selfcode sh:( fo:| ch:? rl:( br:< n4:# ie:{ mo:| va:) js:) de:> zu:) fl:( ss:| ls:?
                    Mein Selfhtml-Kram
                    1. Hi,

                      Diese Prüfung wurde WIMRE unter dem Aspekt eingeführt, daß es einer der beliebtesten Anfängerfehler ist, Vergleiche mit einfachem Gleichzeichen zu schreiben, insofern ist es durchaus nachvollziehbar, daß dieser potentielle Fehler angemerkt wird.

                      natürlich. Was aber absolut kein Grund ist, den Code zu verändern, wenn man ihn als richtig überprüft ist.

                      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,

                        Was aber absolut kein Grund ist, den Code zu verändern, wenn man ihn als richtig überprüft ist.

                        Wie du schon sagtest ...

                        SCNR ChrisB

                        --
                        „This is the author's opinion, not necessarily that of Starbucks.“
                        1. Hi,

                          Was aber absolut kein Grund ist, den Code zu verändern, wenn man ihn als richtig überprüft ist.
                          Wie du schon sagtest ...

                          grrr. Dann eben auf Nummer sicher: Dieser Satz kein Verb.

                          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. Was aber absolut kein Grund ist, den Code zu verändern, wenn man ihn als richtig überprüft ist.
                            Wie du schon sagtest ...

                            grrr. Dann eben auf Nummer sicher: Dieser Satz kein Verb.

                            Ihr macht euch lustig über mich :-(

                            Struppi.

                            1. hallo zusammen
                              ich bin noch auf einen fehler (?) gestossen:

                              var preloadImages = [];  
                              function preLoad(){  
                              var x;  
                              for (x=0; x<preLoad.arguments.length; x++){  
                              preloadImages[x] = new Image();  
                              preloadImages[x].src = preLoad.arguments[x];  
                              }  
                              }
                              

                              führt zu

                              Problem at line 4 character 21: Expected an identifier and instead saw 'arguments' (a reserved word).

                              wo liegt da der fehler?

                              thx für ideen und beste grüsse
                              henry

                              1. for (x=0; x<preLoad.arguments.length; x++){

                                ohne preload

                                Struppi.

                                1. hallo struppi
                                  vielen dank! – jetzt läuft alles durch!

                                  beste grüsse
                                  henry

                            2. Hi,

                              grrr. Dann eben auf Nummer sicher: Dieser Satz kein Verb.
                              Ihr macht euch lustig über mich :-(

                              aber nein, lieber Struppi! Wir machen uns nicht lustig über Dir.

                              Chea "Großhirn an alle: Fertigmachen zum Äääärgääärn!" tah ;-)

                              --
                              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. grrr. Dann eben auf Nummer sicher: Dieser Satz kein Verb.
                                Ihr macht euch lustig über mich :-(

                                aber nein, lieber Struppi! Wir machen uns nicht lustig über Dir.

                                Chea "Großhirn an alle: Fertigmachen zum Äääärgääärn!" tah ;-)

                                Morgen frühstücke ich auch Clown ;-)

                                Struppi.

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

                        Diese Prüfung wurde WIMRE unter dem Aspekt eingeführt, daß es einer der beliebtesten Anfängerfehler ist, Vergleiche mit einfachem Gleichzeichen zu schreiben, insofern ist es durchaus nachvollziehbar, daß dieser potentielle Fehler angemerkt wird.

                        natürlich. Was aber absolut kein Grund ist, den Code zu verändern, wenn man ihn als richtig überprüft ist.

                        Das ist, wie ich schon andeutete, wohl eine reine Sache der Einstellung zu diesem Tool und dessen Meldungen: entweder man hat die „Größe“ und ignoriert die Warnung einfach, _weil_ man selber weiß, daß der Code korrekt ist oder man ist pragmatisch und setzt die (eigentlich unnötigen) Klammern, um die Warnung gar nicht erst anzeigen zu lassen bzw. sich nicht bei jedem erneuten Test damit befassen zu müssen.

                        Ich selbst sehe das einfach als zwei Optionen an, die man einfach nach persönlicher Vorliebe wählt; mehr nicht. JSLint ist genau dann ein sehr sinnvolles und nützliches Tool, um Code zu verbessern, wenn man gelernt hat, daß nicht alle dessen Fehlermeldungen relevant sind.

                        Cü,

                        Kai

                        --
                        Ash nazg durbatulûk, ash nazg gimbatul,ash nazg thrakatulûk, agh burzum-ishi krimpatul
                        selfcode sh:( fo:| ch:? rl:( br:< n4:# ie:{ mo:| va:) js:) de:> zu:) fl:( ss:| ls:?
                        Mein Selfhtml-Kram
          2. Hi,

            müsste den in der while klammer nicht "==" stehen? (- dann meckert er nicht mehr…)

            ich glaube nicht, dass es darum geht, dass ein System keine Warnungen mehr ausgibt. Warnungen sind dazu da, Beachtung zu finden, sie deuten auf *potenzielle* Probleme hin - hast Du sie beachtet und festgestellt, dass der Code in Ordnung ist, ist der Warnung genüge getan.

            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
    2. dw_slidebar.aniTimer=setInterval(function() { dw_slidebar.doSlide();},10);

      Oder einfach setInterval(dw_slidebar.doSlide, 10), wenn in doSlide nicht auf "this" zugegriffen wird.

      Mathias

  2. Hi,

    Problem at line 8 character 9: Expected a conditional expression and instead saw an assignment.
    while(el=el.offsetParent){

    der Code ist gut, ich sehe keinen Grund ihn zu ändern.

    müsste hier "while(el!=el.offsetParent)… geschrieben werden?

    Nein, das würde el nicht verändern. Außerdem wäre diese Bedingung immer gegeben.

    1. "eval is evil"… aber wie kann ich das besser machen?:
      Implied eval is evil. Pass a function instead of a string.
      dw_slidebar.aniTimer=setInterval("dw_slidebar.doSlide()",10);

    Gib an Stelle des Strings eine (anonyme) Funktion an.

    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
  3. function getPageOffsets(el){

    var left=el.offsetLeft;
    var top=el.offsetTop;
    if(el.offsetParent&&el.offsetParent.clientLeft||el.offsetParent.clientTop){
    left+=el.offsetParent.clientLeft;
    top+=el.offsetParent.clientTop;}
    while(el=el.offsetParent){
    left+=el.offsetLeft;
    top+=el.offsetTop;}
    return{x:left,y:top};}

      
    
    > gibt folgende meldung aus:  
    > Problem at line 8 character 9: Expected a conditional expression and instead saw an assignment.  
    > while(el=el.offsetParent){  
    
    JSLint überprüft JavaScript darauf, ob Crockfords empfohlener Programmierstil eingehalten wurde. Du solltest die Warnungen, die ausgegeben werden, entsprechend nehmen - als Empfehlungen.  
      
    Du kannst aber natürlich die Funktion auch so umschreiben:  
    ~~~javascript
    function getPageOffsets(el){  
      var left=0,top=0;  
      if (el.offsetParent&&el.offsetParent.clientLeft||el.offsetParent.clientTop){  
        left=el.offsetParent.clientlLeft;  
        top=el.offsetParent.clientTop;}  
      while (el.offsetParent){  
        el=el.offsetParent;  
        left+=el.offsetLeft;  
        top+=el.offsetTop;}  
      return{x:left,y:top};}
    

    Dann sollten keine Warnungen mehr auftauchen.

    --
    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:|