script-optimierung mit JSLint
henry
- javascript
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
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.
- "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.
Die halte ich Meldung für irrelevant.
Satzbau: sechs :-(
Struppi.
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 ;-)
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
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.
Hast du mal probiert ob er noch meckert, wenn du schreibst:
while((el = el.offsetParent)) ...
hallo struppi
so gehts! – vielen dank!
gruss
henry
[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
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
[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
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
Hi,
Was aber absolut kein Grund ist, den Code zu verändern, wenn man ihn als richtig überprüft ist.
SCNR ChrisB
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 ;-)
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.
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
for (x=0; x<preLoad.arguments.length; x++){
ohne preload
Struppi.
hallo struppi
vielen dank! – jetzt läuft alles durch!
beste grüsse
henry
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 ;-)
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.
[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
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
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
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.
- "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
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.