Perché il mio confronto di uguaglianza con = (un singolo uguale) non funziona correttamente?

Sto cercando di verificare se una stringa è vuota, inferiore o uguale a 9 cifre o fino a 10 cifre. Ma segue sempre il else if (str.length <= 9) .

 if (str = ''){ console.log("The string cannot be blank"); } else if (str.length <= 9) { console.log("The string must be at least 9 characters long"); } else if (str.length <= 10) { console.log("The string is long enough."); } 

Non importa cosa ho messo, ottengo sempre The string must be at least 9 characters long . Perché?

= è sempre un compito. Il confronto di uguaglianza è == (loose, coerces types to try to far match) o === (no type coercion).

Quindi tu vuoi

 if (str === ''){ // -----^^^ 

non

 // NOT THIS if (str = ''){ // -----^ 

Cosa succede quando lo fai if (str = '') è che l’ assegnazione str = '' è terminata, e quindi il valore risultante ( '' ) è testato, in modo simile a questo (se ignoriamo un paio di dettagli):

 str = ''; if (str) { 

Poiché '' è un valore falsy in JavaScript, tale controllo sarà falso e passerà al passo else if (str.length <= 9) . Poiché a quel punto, str.length è 0 , questo è il percorso che il codice prende.