2014-12-24 18 views
22

So che null è un oggetto senza attributi o funzioni.Perché (null == false) e (null == true) entrambi restituiscono false?

Tuttavia, sono confuso dal motivo per cui console.log(null == false); e console.log(null == true); restituiscono entrambi false.

Quali sono le regole di conversione tra null e boolean?

+5

Entrambi pari falso perché nulla non è uguale vero o falso. Proprio come '1' non corrisponde a' "pizza" 'o' {} '. Se usato da solo in like se le istruzioni vengono forzate a booleano false perché è un valore di falso –

+0

Null è un valore letterale e false è booleano, possono essere entrambi tipi non comparabili –

+4

perché JavaScript –

risposta

32

Questo perché il Abstract Equality Comparison Algorithm richiede che se Type(x) o Type(y) è un booleana nell'espressione x == y allora il valore booleano dovrebbe essere costretto a un numero tramite ToNumber, che converte true a 1 e false a +0.

Ciò significa che qualsiasi confronto di true == something o something == true risultati in 1 == something o something == 1 (sostituzione true e 1 con false e +0 per false).

The Null type non confronta come uguale a 1 o +0 (infatti, null è paragonabile solo a undefined nell'AECA).

C'è una discussione dettagliata di tutti i diversi tipi di uguaglianza in JavaScript su MDN che vale la pena esaminare se vuoi saperne di più.

Tuttavia, se si costringere null ad un numero che è coerced to +0 così +null == false in realtà restituisce true.

+0

Grazie mille, ho un'altra confusione, so che 'isNaN (null)' equals 'false' e ​​'Number (null)' è uguale a '0', perché è null coercible a 'undefined' not' 0' – iatboy

+0

'null' e' undefined' sono equivalenti in questo caso molto probabilmente perché sono gli unici due elementi in JS che non possono gestire alcun tipo di accesso alle proprietà. '(0) .toString() ===" 0 "ma' (null) .anything' produce un 'TypeError'. –

+0

Per una risposta completa, vedere https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness – stevemao

0

Il valore null è un valore letterale JavaScript che rappresenta un valore "vuoto" o "non definito". null è uno dei valori primitivi di JavaScript. Non è né uguale a booleano true né uguale a booleano false perché il suo valore non è definito. Il valore di null è più inclinato verso il falso anche se non è false. Ecco perché si chiama "falso" e un blocco if (var) { } non viene eseguito quando var è null.

+0

'var' non dovrebbe essere usato come nome di variabile, poiché è una parola riservata. esempio dovrebbe dire 'someVar' invece di' var'. – SherylHohman

+0

Non confondere "... il valore è indefinito" con il valore di "non definito". Meglio indicato come "... il valore è sconosciuto". – SherylHohman

2

Risposta: Non esiste alcun aspetto relativo tra null e booleano.

Fonte MDN: -

Il valore null è un letterale (non una proprietà dell'oggetto globale come indefinito può essere). Nelle API, il valore nullo viene spesso recuperato nel punto in cui è possibile prevedere un oggetto ma nessun oggetto è rilevante. Durante il controllo di nullo o indefinito, fare attenzione alle differenze tra uguaglianza (==) e operatori di identità (===) (la conversione del tipo viene eseguita con il codice precedente).

// foo does not exist, it is not defined and has never been initialized: 
> foo 
"ReferenceError: foo is not defined" 

// foo is known to exist now but it has no type or value: 
> var foo = null; foo 
"null" 

Differenza tra zero e indefinito

typeof null  // object (bug in ECMAScript, should be null) 
typeof undefined // undefined 
null === undefined // false 
null == undefined // true 

Javascirpt|MDN

+3

Probabilmente dovresti chiarire quali parti di questa risposta hai preso dalla fonte e quali parti hai scritto tu stesso. Vedi http://stackoverflow.com/help/referencing – BoltClock

1

Aggiunta alla discussione corrente. null> = false restituisce true.

Credo che sia perché questo viene interpretato come! (Null < false)

Problemi correlati