Klaida „netikėta ++“ jslint

Kas yra? geriausia praktika?

Jslint aiškina, kad tai „prideda painiavą“. Aš nematau ...

EDIT: Kodas pagal užklausą:

  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]; } } } 
139
08 июня '10 в 21:44 2010-06-08 21:44 KdgDev paprašė birželio 10 d. 10 d. 21:44 2010-06-08 21:44
@ 8 atsakymai

Vietoj to naudokite „ i += 1 jei norite sekti „jslint“ patarimus.

90
09 июня '10 в 7:42 2010-06-09 07:42 atsakymas pateikiamas nuo birželio 10 d., 10 val., 7:42, 2010-06-09 07:42

Tiesiog pridėkite priešais „JavaScript“ failą.

86
18 сент. atsakymas, kurį pateikė Rico Sonntag 18 sep. 2012-09-18 14:17 '12, 12:17 pm 2012-09-18 14:17

Kad išvengtumėte painiavos ir galimų problemų, kai naudojate miniferatorius, visada naudokite keitiklius aplink operatorių ir jo operandą, kai jie naudojami kartu su tuo pačiu (+ arba -).

 var i = 0, j = 0; alert(i++ +j); 

Tai prideda „i“ ir „j“ (ir padidina „i“ kaip šalutinį efektą), dėl kurio atsiranda įspėjimas apie 0.

Bet kad kas nors ateina ir juda erdvę?

 var i = 0, j = 0; alert(i+ ++j); 

Dabar šis pirmas žingsnis j, o tada pridėsiu prie naujos vertės j, todėl pasirodo 1 įspėjimas.

Tai galima lengvai išspręsti atlikdami

 var i = 0, j = 0; alert((i++) +j); 

Dabar tai negali būti klaida.

28
08 июня '10 в 21:54 2010-06-08 21:54 Atsakymą pateikė Sean Kinsey birželio 10 d. 10 val. 21:54 2010-06-08 21:54

Asmeniškai aš norėčiau įterpti tokias išraiškas kaip „ i++ “ į eilutę. Jų įtraukimas į didesnio pareiškimo dalį gali sukelti painiavą tiems, kurie nėra tikri, ką turėtų daryti.

Pavyzdžiui, vietoj:

 value = func(i++ * 3); 

Norėčiau tai padaryti:

 value = func(i * 3); i++; 

Tai taip pat reiškia, kad žmonės neturi prisiminti, kaip i++ ++i i++ ir „ ++i , ir pašalina poreikį taikyti gana daug pirmenybės taisyklių.

14
08 июня '10 в 21:47 2010-06-08 21:47 atsakymą davė Samir Talwar birželio 10 d. 10 val. 21:47 2010-06-08 21:47

Tikroji „ ++ operatoriaus problema yra tai, kad jis yra šalutinis poveikis ir todėl visiškai priešingas funkcinio programavimo principui.

„Funkcinis“ būdas „ i++ “ įgyvendinti bus i = i + 1 , kai aiškiai pakeisite kintamąjį be šalutinio poveikio ir naudosite jį.

Galimybė supainioti yra tai, kad ++ daro du dalykus pridėdama vertę IR perkeliant jį į kintamąjį.

9
14 марта '13 в 1:09 2013-03-14 01:09 Atsakymą pateikė benzonikas kovo 13 d. 13:09 2013-03-14 01:09

Jslint draugiška kilpa

 for (i = 0; i < 10; i += 1) { //Do somthing } 
6
17 апр. Atsakymą pateikė GeographicPerspective 17 Bal. 2015-04-17 01:33 '15 at 1:33 2015-04-17 01:33

Atkreipkite dėmesį, kad ++ operatorius priklauso nuo pozicijos, palyginti su ankstesniu / kintamuoju kintamuoju, ir nuo naujos eilutės / kabliataškio, siekiant nustatyti operacijų eiliškumą.

 var a = 1; var b = a++; console.log(b); // b = 1 console.log(a); // a = 2 var a = 1; var b = ++a; console.log(b); // b = 2 console.log(a); // a = 2 
4
01 нояб. atsakymas duotas miketheprogrammer 01 Nov. 2013-11-01 19:27 '13, 19:27, 2013-11-01 19:27

Yra kažkas vadinama išankstiniu prieaugiu: ++ me ir post-increment me ++ yra skirtumas:

 var i = 9; alert(++i); //-> alerts 10 var j = 9; alert(j++); //-> alerts 9 alert(j); //-> alerts 10 now, as expected var k = 9; alert((k++)); //-> still alerts 9 even with extra parentheses 
3
14 марта '13 в 0:57 2013-03-14 00:57 atsakymą pateikė Paul Scheltema kovo 14 d., 13 val. 0:57 2013-03-14 00:57

Kiti klausimai apie „ arba užduoti klausimą