Const javascript? Kada naudoti ir reikia

Neseniai sutikau su javascript const raktiniu žodžiu. Iš to, ką galiu pasakyti, jis naudojamas keičiamiems kintamiesiems kurti, ir aš jį išbandžiau, kad įsitikintumė, jog jis negali būti pakeistas (node.js):

 const x = 'const'; const x = 'not-const'; // Will give an error: 'constant 'x' has already been defined' 

Suprantu, kad ji vis dar nėra standartizuota visose naršyklėse, tačiau domina tik kontekstas node.js / v8, ir pastebėjau, kad kai kurie kūrėjai / projektai tai labai atspindi, kai var raktinį žodį galima naudoti tuo pačiu efektu.

Klausimai

Kada tikslinga naudoti const vietoj var ?

Ar jis turėtų būti naudojamas kiekvieną kartą, kai deklaruojamas kintamasis, kuris nebus paskirtas?

Ar tikrai svarbu, ar vietoj const, ar atvirkščiai? var ?

231
20 янв. axdg yra nustatytas sausio 20 d 2014-01-20 17:56 '14, 17:56, 2014-01-20 17:56
@ 12 atsakymų

Jūsų klausimams const du aspektai: kokie yra techniniai „ const o ne „ var naudojimo aspektai ir kokie yra susiję su asmeniu susiję aspektai.

Techninis skirtumas yra didelis. Apibendrintose kalbose konstantas bus pakeistas pastoviu laiku, o jo naudojimas leis jums naudoti kitas optimizacijas, pvz., Pašalinti negyvą kodą, kad dar labiau pagerintumėte kodo vykdymo efektyvumą. Naujausi (laisvai vartojami terminai) „JavaScript“ varikliai iš tikrųjų kompiliuoja JS kodą, kad pagerintų našumą, todėl naudojant raktinį žodį const sako, kad aukščiau aprašyti optimizavimai yra galimi ir turi būti atlikti. Dėl to padidėja našumas.

Žmogiškasis aspektas susijęs su raktinio žodžio semantika. Kintamasis yra duomenų struktūra, kurioje pateikiama informacija, kuri turėtų keistis. Pastovus yra duomenų struktūra, kurioje yra informacijos, kuri niekada nepasikeis. Jei yra klaidų, visada turėtumėte naudoti var . Tačiau ne visa informacija, kuri niekada nekeičia programos gyvavimo metu, turi būti deklaruota su const . Jei informacija turi keistis skirtingomis aplinkybėmis, naudokite var kad nurodytumėte, jog net jei faktinis pokytis jūsų kode nerodomas.

307
20 янв. Atsakymas pateikiamas Tibos sausio 20 d 2014-01-20 18:07 '14, 18:07 2014-01-20 18:07

Atnaujinti 2017 m

Šis atsakymas vis dar gauna daug dėmesio. Verta pažymėti, kad šis atsakymas buvo paskelbtas 2014 m. Pradžioje ir nuo to laiko pasikeitė. parama dabar yra norma. Dabar visos šiuolaikinės naršyklės palaiko const , todėl jos naudojimas yra gana saugus be problemų.


Originalus atsakymas nuo 2014 m

Nepaisant to, kad naršyklės palaikymas yra gana padorus , aš jo nenaudosiu. Iš MDN straipsnio į const :

Dabartinis „const“ diegimas yra plėtinys, priklausantis nuo „Mozilla“, ir jis nėra ECMAScript 5 dalis. Jis yra palaikomas „Firefox“ ir „Chrome“ (V8). Pradedant nuo „Safari 5.1.7“ ir „Opera 12.00“, jei nustatote kintamąjį su pastovia šiose naršyklėse, vėliau galite pakeisti jos vertę. Jis nepalaikomas „Internet Explorer 6-10“, bet yra įtrauktas į „Internet Explorer 11“. Raktinis žodis const deklaruoja pastovią funkcijų srityje (pvz., Kintamieji, deklaruoti su var).

Taip yra:

const bus apibrėžtas ECMAScript 6, bet su skirtingais semantikais. Kaip ir kintamieji, deklaruoti naudojant „let“ operatorių, konstantos, deklaruotos naudojant konstantą, bus sritys, kuriose yra blokinė sritis.

Jei naudojate const , turėsite pridėti problemą, kad palaikytumėte šiek tiek senesnes naršykles.

58
20 янв. James Donnelly atsakymas sausio 20 d 2014-01-20 18:02 '14 at 18:02 2014-01-20 18:02

Siekiant integruoti ankstesnius atsakymus, akivaizdų pranašumą deklaruojant pastovius kintamuosius, be našumo priežasties: jei netyčia bandote juos pakeisti ar pakeisti kodą, programa atitinkamai nepakeis vertės arba nepadės klaidos.

Pavyzdžiui, palyginkite:

 // Will output 'SECRET' const x = 'SECRET' if (x = 'ANOTHER_SECRET') { // Warning! assigning a value variable in an if condition console.log (x) } 

nuo:

 // Will output 'ANOTHER_SECRET' var y = 'SECRET' if (y = 'ANOTHER_SECRET') { console.log (y) } 

arba

 // Will throw TypeError: const 'x' has already been declared const x = "SECRET"  var x = 0 

su

 // Will reassign y and cause trouble var y = "SECRET"  var y = 0 
24
08 апр. atsakymas duotas janesconference 08 Apr. 2014-04-08 17:09 '14, at 17:09, 2014-04-08 17:09

const nėra nekintamas.

MDN :

„Const“ deklaracija sukuria tik skaitomos nuorodos vertę. Tai nereiškia, kad vertė, kurią ji turi, yra nekintama, tik kintamojo identifikatorius negali būti perkeliamas.

21
08 марта '16 в 1:40 2016-03-08 01:40 atsakymą pateikė Antoine kovo 8 d. 16 d. 1:40 2016-03-08 01:40

Kodėl naudoti const , @Tibos atsakymas puikiai.

Bet jūs sakėte:

Iš to, ką galiu pasakyti, jis naudojamas keičiamiems kintamiesiems

Tai neteisinga . Kintama mutacija skiriasi nuo pakartotinio keitimo:

 var hello = 'world' // assigning hello = 'bonjour!' // reassigning 

Su const galite tai padaryti:

 const hello = 'world' hello = 'bonjour!' // error 

Tačiau galite pakeisti savo kintamąjį:

 const marks = [92, 83] marks.push(95) console.log(marks) // [92, 83, 95] -> the variable has been mutated. 

Taigi, bet koks procesas, keičiantis kintamojo vertę nenaudojant = ženklo, = išjungtas.

Pastaba: += , pavyzdžiui, ... pakartotinis priskyrimas!

 var a = 5 a += 2 // is the same as a = a + 2 

Taigi, apatinė eilutė: const nesutrukdo jums kartoti per kintamuosius, tai neleidžia jums jų priskirti iš naujo.

13
03 апр. atsakymas pateikiamas matematikoje2001 03 balandžio. 2017-04-03 01:11 '17 at 1:11 2017-04-03 01:11

Mano patirtimi aš naudoju const, kai noriu įdiegti kažką, ką galėčiau pakeisti vėliau, nereikia ieškoti kodo, ieškančio, pvz., Koduotų bitų. Failo kelias arba serverio pavadinimas.

Bandymo klaida yra dar vienas dalykas, bet bandote padaryti kitą kintamąjį, vadinamą x, tai bus tikslesnis testas.

 const x = 'const'; x = 'not-const'; 
6
20 янв. Atsakymas pateikiamas Funkotron_King 20 sausis 2014-01-20 18:02 '14 at 18:02 2014-01-20 18:02

Turite puikių atsakymų, bet leiskite jam būti lengvai.

const turėtų būti naudojamas, kai turite tam tikrą pastovumą (perskaitykite, kaip: ji nepasikeis vykdant programą).

Pavyzdžiui:

 const pi = 3.1415926535 

Jei manote, kad tai gali būti pakeista vėliau, naudokite var .

Praktinis skirtumas, paremtas pavyzdžiu, yra tas, kad su const visada manote, kad pi bus 3,14 [...], tai yra faktas.

Jei jį apibrėžiate kaip var , tai gali būti 3,14 [...] arba ne.

Norėdami gauti daugiau techninio atsakymo, @Tibos yra akademiškai teisingas.

6
20 янв. atsakymą pateikė Edgar Griñant 2014-01-20 18:29 '14 at 18:29 2014-01-20 18:29

Asmeninės nuostatos tikrai. Galite naudoti const, jei, kaip sakote, jis nebus perkeliamas ir bus nuolatinis. Pavyzdžiui, jei norite priskirti savo gimtadienį. Jūsų gimtadienis niekada nepasikeis, todėl galite jį naudoti kaip pastovią. Tačiau jūsų amžius skiriasi, todėl jis gali būti įvairus.

3
20 янв. Carl Markham atsakymas, pateiktas sausio 20 d 2014-01-20 17:59 '14, 17:59 2014-01-20 17:59

Ji suteikia: 1) permalinką, pavyzdžiui, const x = [] - masyvą galima keisti, bet x negali nukreipti į kitą masyvą; ir 2) peržiūrėti plotą. const ir leiskite kartu pakeisti var in ecma6 / 2015 Žiūrėti diskusiją https://strongloop.com/strongblog/es6-variable-declarations/

2
07 окт. atsakymas duotas Genovo spalio 07 d 2015-10-07 15:38 '15, 15:38, 2015-10-07 15:38

Pirma, trys naudingi dalykai, susiję su const (be to, kad patobulinta sritis, su kuria ji dalijasi su let ):

  • Tai yra dokumentai žmonėms, kurie vėliau skaito kodą, kad vertė neturėtų pasikeisti.
  • Tai neleidžia (ar kas nors po jūsų) keisti vertę, nebent jie grįžtų ir sąmoningai keičia skelbimą.
  • gali optimizuoti „JavaScript“ variklį tam tikroje analizėje. Pvz., Nurodėte, kad vertė negali keistis, todėl variklis neturėtų atlikti darbo, kad nustatytų, ar vertė keičiasi, todėl ji gali nuspręsti, ar optimizuoti pagal vertę, kuri nekeičia.

Jūsų klausimai:

Kada tikslinga naudoti const vietoj var ?

Tai galite padaryti kiekvieną kartą, kai deklaruojate kintamąjį, kurio vertė niekada nepasikeičia. Nepriklausomai nuo to, ar manote, kad tai tinkama, viskas priklauso nuo jūsų pageidavimų / pageidavimų.

Ar jis turėtų būti naudojamas kiekvieną kartą, kai deklaruojamas kintamasis, kuris nebus paskirtas?

Tai jums / jūsų komandai.

Ar tikrai svarbu, ar var is used in place of const, ar atvirkščiai?

Taip:

  • var ir const turi skirtingas taisykles. (Galbūt norėjote palyginti su let , ne var .) Visų pirma: const ir let yra blokinės sritys ir, kai naudojamos visame pasaulyje, nesukurkite pasaulinio objekto savybių (net jei jos sukuria pasaulines). var turi pasaulinę taikymo sritį (kai ji naudojama pasauliniu mastu) arba funkcijų sritį (net jei ji naudojama bloke), o kai naudojama pasauliniu mastu, sukuria visuotinio objekto nuosavybę.
  • Žr. Mano „tris naudingus dalykus“, jie visi susiję su šia problema.
1
04 авг. atsakymas, kurį pateikė TJ Crowder 04 rug. 2017-08-04 11:35 '17 at 11:35 2017-08-04 11:35

„const“ reiškia jūsų kodą, kurio identifikatorius nebus perkeliamas. Tai geras straipsnis apie tai, kada naudoti „const“, „let“ ar „var“, https://medium.com/javascript-scene/javascript-es6-var-let-or-const-ba58b8dcde75#.ukgxpfhao

0
15 марта '17 в 17:57 2017-03-15 17:57 atsakymą pateikė Ananda , kovo 15 d. 17, 17:57 2017-03-15 17:57

Aš nesu JS kompiliacijos ekspertas, bet yra tikslinga pasakyti, kad v8 naudoja const flag

Paprastai, paskelbus ir keičiant kintamųjų grupę, atmintis yra suskaidyta, o v8 sustabdomas vykdymui, ji per kelias sekundes sustabdo gc arba šiukšlių surinkimą.

Jei kintamasis yra deklaruotas pastoviu v8, galite saugiai įdėti jį į fiksuoto dydžio talpyklą tarp kitų pastovių kintamųjų, nes jis niekada nepasikeis. Jis taip pat gali išsaugoti teisingas šių duomenų tipų operacijas, nes tipas nepasikeis.

0
24 сент. Atsakymas duotas žydui 24 Sep. 2017-09-24 21:03 '17 - 21:03 2017-09-24 21:03

Kiti klausimai apie etiketes arba Užduoti klausimą