Cosa succede se dichiarazione (evento) significa in JavaScript? [chiuso]

0

Sono piuttosto nuovo in JavaScript e nella programmazione in generale, quindi sono praticamente abituato a vedere se le istruzioni che hanno un qualche tipo di operatore di confronto, come if (x < 10) o if(myBool) .

Ho visto un controllo dell'istruzione if rispetto a event , ma non capisco cosa o perché il event venga controllato in questo modo. Qual è il significato semantico dietro quel controllo o confronto?

Ecco il codice in questione:

if(event){
    event.preventDefault();
}
    
posta j flo 13.06.2014 - 06:57
fonte

4 risposte

5

Javascript ha una funzione chiamata tipo coercizione . C'è un bel riferimento / tutorial per i booleani , quindi non lo farò entrare nei dettagli di ciò che viene forzato in base a cosa. Una comune abbreviazione per il casting su un valore booleano da qualsiasi tipo di myVariable è su boolean-negate due volte: !!myVariable .

Gli oggetti (che di solito è un evento javascript) valutano true se non sono null e non- undefined . Gli oggetti vuoti (con length === 0 ) valgono anche per true .

Valutazione del cortocircuito degli operatori booleani, il che significa che è comune la stenografia dei blocchi if di una riga come questa:

event && event.preventDefault();

Le funzioni possono anche essere forzate in booleano true s. Questo è un pezzo valido di javascript:

if(event.preventDefault) { // Note if event is undefined this WILL throw an error
    event.preventDefault();
}
// or, avoiding the error
if(event && event.preventDefault) {
    event.preventDefault();
}

Lo snippet di codice che hai postato può essere comunemente visto nei gestori di eventi, anche se di solito non è necessario: un propagatore di eventi probabilmente contrae contratto se sta passando un handle di evento non definito al gestore. (E se questo è un contratto valido, probabilmente è un cattivo design)

    
risposta data 13.06.2014 - 10:43
fonte
2

JavaScript ha il concetto di valori "verità" e "falsi".

I seguenti valori sono falsey :

  • false
  • null
  • undefined
  • 0
  • NaN
  • '' (stringa vuota)

Tutti gli altri valori sono truthy .

Quando una variabile viene lanciata su un booleano, la sua "verità" viene controllata. Quando viene valutata in un'istruzione if , o in uno qualsiasi di ?: , || e && , la variabile viene automaticamente castata su un valore booleano ai fini del controllo (la variabile stessa non viene modificata).

Ciò significa che:

if (event) {

viene essenzialmente trattato come:

if (Boolean(event)) {

Questo tipo di controllo viene spesso utilizzato per verificare che esista una variabile prima di utilizzare i metodi su di essa. In questo caso impedisce un errore di riferimento null su variabili non definite.

Nota: la Verità è non lo stesso che controllare una variabile rispetto a true o false .

cioè.

if (foo) {

non è uguale a

if (foo == true) {

Un semplice esempio di dove questo fallisce è quando si confronta con un oggetto:

var foo = {};
if (foo) {
    console.log('this works!');
}
if (foo == true) {
    console.log('this doesn\'t work!');
}
    
risposta data 13.06.2014 - 16:08
fonte
2

Senza sapere cosa event non possiamo dire molto, a parte quello alla fine della giornata, event si risolve in true o false . In quanto sopra, è molto probabile che il codice verifichi che event non sia null .

    
risposta data 13.06.2014 - 07:08
fonte
1

Questo significa che l'evento è diverso da zero (se il valore è intero), vero (se è un booleano) o non null (se è qualcos'altro).

In molte lingue (compilate o di script), quando una condizione viene valutata, ne risulta un valore. Quindi, x < 10 risultati in vero (o in alcune lingue un valore numerico diverso da zero) e quindi viene interpretato come una condizione vera. Quindi, se dovessi dire se (evento) dove il valore dell'evento era 1 (o non-null), allora sarebbe considerato vero e il blocco if verrà eseguito. La stessa logica si applica a null vs non-null.

Puoi provare questo codice JS e vedere che un avviso salirà e l'altro no. Puoi sostituire l'evento con null con una stringa (ad es. 'Blah') e con 0 vs non-0 e vedere che si comporterà in modo simile:

var event = true;
if (event) alert('true!');
var event = false;
if (event) alert('false!');
    
risposta data 13.06.2014 - 07:17
fonte

Leggi altre domande sui tag