javascript - Felet "oväntad ++" i jslint
Vad är bästa praxis för det då?
Jslint förklarar att det "läggar till förvirring". Jag ser det verkligen inte...
REDIGERA: Koden, som begärt:
var all,l,elements,e;
all = inElement.getElementsByTagName('*');
l = all.length;
elements = [];
for (e = 0; e < l; (e++))
{
if (findIn)
{
if (all[e].className.indexOf(className) > 0)
{
elements[elements.length] = all[e];
}
} else {
if (all[e].className === className)
{
elements[elements.length] = all[e];
}
}
}
Svar #1
Den långvariga bästa praxis: använd i += 1 istället, enligt jslints råd.
När det gäller varför det är en bättre praxis än ++, enligt Crockford:
Inkrement-
++och dekrement---operatörer gör det möjligt att skriva på ett extremt kompakt sätt. I språk som C gjorde de det möjligt att skriva enraderskod som:for (p=src, q=dest; !*p; p++, q++) *q=*p;De flesta bufferöverskridningsbuggar som skapade allvarliga säkerhetssårbarheter berodde på kod som denna. I min egen praktik observerade jag att när jag använde++och--, tenderade min kod att bli för kompakt, för klurig, för kryptisk. Så, som en fråga om disciplin, använder jag dem inte längre.
Redigera: Inkluderade kommentar från Nope eftersom detta svar fortsätter att få visningar.
Svar #2
Lägg bara till /*jslint plusplus: true */ framför din javascript-fil.
Svar #3
För att undvika förvirring och eventuella problem vid användning av minifierare, omslut alltid operatorn och dess operand med parenteser när de används tillsammans med samma (+ eller -).
var i = 0, j = 0;
alert(i++ +j);
Detta lägger till i och j (och ökar i som en bieffekt) vilket resulterar i att 0 alertas.
Men vad händer om någon kommer förbi och flyttar rymden?
var i = 0, j = 0;
alert(i+ ++j);
Nu ökar detta först j, och sedan lägger det till i det nya värdet av j, vilket resulterar i att 1 varnas.
Detta kan enkelt lösas genom att göra
var i = 0, j = 0;
alert((i++) +j);
Detta kan nu inte misstas.
Svar #4
Personligen föredrar jag att placera uttryck som i++ på en rad för sig själva. Att inkludera dem som en del av ett större uttryck kan orsaka förvirring för dem som inte är säkra på vad raden är tänkt att göra.
Till exempel, istället för:
value = func(i++ * 3);
Jag skulle göra detta:
value = func(i * 3);
i++;
Det betyder också att människor inte behöver komma ihåg hur i++ och ++i fungerar, och tar bort behovet av att tillämpa så många preferensregler.
