Tutti i linguaggi di programmazione, incluso JavaScript (JS), hanno tipi di dati incorporati; questi includono stringhe, numeri, Date, Matrici, e così via. Ciò che rende speciale JS è che è digitato liberamente. Pertanto, le variabili vengono dichiarate senza un tipo, il che consente di riassegnare loro valori di un tipo diverso in qualsiasi momento. Questa caratteristica rende il linguaggio più dinamico, ma porta anche a più bug di probabilmente tutte le altre funzionalità messe insieme! È un tale problema, in effetti, quello Dattiloscritto è stato creato per portare una tipizzazione forte nel linguaggio JavaScript.
Non che la coercizione automatica del tipo di JS sia del tutto negativa: fa parte di ciò che rende JavaScript uno dei linguaggi di programmazione più facili da imparare per i principianti e ha senza dubbio svolto un ruolo sostanziale nella longevità e popolarità di JS. Per gli sviluppatori più esperti, il percorso per ridurre la frustrazione consiste nel dedicare del tempo all’apprendimento dello standard di specifica del linguaggio ECMAScript e diventare più abili nell’affrontare le molte stranezze della coercizione dei tipi. Considera questo tutorial sullo sviluppo web come un punto di partenza per quel viaggio, poiché spieghiamo come JavaScript converte un tipo in un altro in base a come le variabili interagiscono tra loro nel codice.
Puoi saperne di più su ECMAScript nel nostro tutorial: Programmazione asincrona in ECMAScript.
Quali sono i tipi primitivi di JavaScript?
Prima di poter parlare di coercizione del tipo, dovremmo stabilire quali sono i tipi di JavaScript, poiché non li vedrai quando dichiari le variabili. JavaScript ha sette tipi primitivi:
- corda
- numero
- booleano
- non definito
- nullo
- Simbolo
- BigInt
Ciò che tutti i tipi di cui sopra hanno in comune è che i tuoi non sono oggetti e, come tali, non hanno metodi o proprietà, a differenza di dire Matrici o Date.
Potresti anche voler controllare la nostra guida a Lavorare con le variabili CSS.
Come verificare il tipo di una variabile in JavaScript
Gli sviluppatori Web possono ottenere il tipo di una variabile (in quel momento), utilizzando il file tipo di operatore:
console.log(typeof 42); // expected output: "number" console.log(typeof 'blubber'); // expected output: "string" console.log(typeof true); // expected output: "boolean" console.log(typeof undeclaredVariable); // expected output: "undefined"
Numero e BigInt avere un valore correlato Na N. Abbreviazione di “Non un numero”, Na N si verifica in genere quando il risultato di un’operazione aritmetica non può essere espresso come numero. È anche l’unico valore in JavaScript che non è uguale a se stesso!
// outputs NaN console.log(parseInt("blabla"));
Coercizione implicita vs. esplicita in JavaScript
Sorprendentemente, tutti i problemi di coercizione dei tipi in JavaScript sono causati da corda, numeroe booleano tipi primitivi (non c’è modo in JavaScript di costringere un tipo primitivo a oggetti o funzioni)! La coercizione di tipo implicita si verifica quando mescoliamo tipi diversi all’interno della stessa operazione o serie di operazioni.
Coercire a booleano in JavaScript
La cosa strana di booleani è che tutti i valori primitivi hanno anche un intrinseco booleano valore, che li rende “veriti” o “falsi”. Alcune delle regole che determinano come non booleano i valori sono forzati VERO o falso i valori non sono intuitivi, quindi vale la pena esaminarli ora.
I seguenti valori sono sempre falso:
- falso
- 0 (zero)
- -0 (meno zero)
- 0n (BigInt zero)
- una stringa vuota, ad es ”, “”, “
- nullo
- non definito
- Na N
Tutto il resto lo è veritiero. Quello include:
- una stringa non vuota, ad es “stringa di prova”, ‘0’, ‘falso’
- qualsiasi numero diverso da zero, ad es 1, -1, 2112
Ecco perché i programmatori possono verificare la veridicità in un Se dichiarazione:
var widget="bolt"; //later in the code if (widget) { // do something }
Finché la variabile widget contiene una stringa non vuota, il file Se il blocco verrà eseguito.
Piuttosto che lasciare che JS costringa le espressioni in a booleano risultato, è perfettamente accettabile farlo da soli usando il booleano() funzione:
var widget="bolt"; var isSoldOut = false; //later in the code if (widget !== '' && !Boolean(isSoldOut)) { // do something }
Coercizione numerica in JavaScript
Se provi a confrontare una variabile di un tipo diverso con un numero, JS la costringerà utilmente a un numero, al fine di eseguire un confronto da mela a mela. Quando un tipo non può essere forzato a un numero, il risultato restituito è Na N. Ad esempio, una stringa vuota verrà convertita in zero (0). Alcuni sviluppatori sono stati critici nei confronti di questo comportamento perché non sono d’accordo sul fatto che una stringa vuota debba essere considerata un numero valido, alcuni sono addirittura arrivati al punto di affermare che “stringhe vuote che diventano 0 è la radice di tutta la coercizione del male” ( Kyle Simpson, il creatore del Non conosci JS serie di libri).
Non che la coercizione di tipo implicito sia del tutto negativa. Ci permette di fare cose fantasiose come questa:
// Adds 1 to the currentIndex if the userId is 99. var index = currentIndex + (userId == 99); var info = userData[index];
Solo per sicurezza, potresti assicurartene indice contiene un numero valido utilizzando il Numero() funzione:
// Adds 1 to the currentIndex if the userId is 99. var index = currentIndex + (userId == 99); if ( !isNaN(Number(index)) ) { var info = userData[index]; }
Basta non usare tipo diperché tornerà”numero” anche per Na N!
Leggi: I migliori corsi online per imparare l’HTML
Conversione di stringhe JavaScript
Problemi con la coercizione implicita al corda tipo può sorgere mescolando tipi come numeri e stringhe nella stessa espressione. Ad esempio, fa 10 + “10” valutare il numero 20 o la stringa “1010”? (È il secondo.) Anche se conosci la risposta, forse il prossimo sviluppatore non lo farà, quindi perché rischiare?
var val1 = 10; var val2 = "10"; var stringResult = String(val1) + String(val2); var numResult = Number(val1) + Number(val2);
Collegamenti alla conversione di stringhe JavaScript
Gli sviluppatori JavaScript esperti spesso impiegano Unario operatori per attivare la coercizione di una variabile nel tipo desiderato. Ad esempio, il “+” operatore farà in modo che una variabile venga forzata in a numero. Quindi, +val1 + +val2 è equivalente al Numero(val1) + Numero(val2) affermazione che abbiamo visto sopra.
Allo stesso modo, il botto “!” operatore forzerà la coercizione di una variabile in a booleano valore. Lo vedrai spesso usato Se affermazioni come se (! val1) { per veridicità e se (!!val1) { per falsità.
Non c’è Unario operatore per stringhema alcuni sviluppatori forzano la coercizione a corda concatenando un vuoto corda ad una variabile come in val1 + ”. Personalmente non sono un fan e preferisco convertire esplicitamente la variabile in questione in a corda usando il Corda() funzione:
var stringVal = String(val1);
Considerazioni finali sulla coercizione del tipo JavaScript
La coercizione implicita di JavaScript è un’arma a doppio taglio. Da un lato, rende la lingua facile da imparare dai programmatori inesperti. Dall’altro, può portare a difficoltà indicibili per gli sviluppatori più esperti che devono affrontare tutti i bug che genera. Se prendi una cosa da questo tutorial, è che non dovresti fare affidamento sulla coercizione implicita per confrontare le variabili di tipo primitivo e invece convertirle esplicitamente tu stesso usando funzioni come Corda(), Numero()e booleano().
Leggi di più Tutorial di sviluppo web JavaScript.