2013-07-04 13 views
5
  1. falsa
  2. nullo
  3. indefinito
  4. stringa vuota

li uso, ma sono ancora all'oscuro della differenza marginale ogni prospettiva nella lista di cui sopra hanno . Principalmente uso 0, falso. Ma ho trovato molti script che usano una stringa vuota e non definita. Voglio sapere la differenza esatta tra di loro. So che è una domanda sciocca, ma sarebbe grandioso se ricevo una piccola risposta al consc.differenza tra i compiti assegnati a una variabile?

+0

Vedere la risposta 'utente2549366'. Aiutato me. –

+0

Penso che ci siano risposte migliori di quel link. –

risposta

0

Il tipo è la differenza.

false è un booleano, 0 è un numero, null è un oggetto, undefined è indefinito, e '' è una stringa.

Si sceglie il tipo in base a ciò che viene utilizzato come. Per esempio:

// There is nothing wrong with this block of code 
var num_cats = 7; 
if(num_cats){ 
    // num_cats is truthy 
} 

// This block works but it could be made more clear 
var has_cat = num_cats; 
if(has_cat){ 
    // This would work, but it doesn't make sense. As a developer I would 
    // expect that has_cat should be either true or false, not 7. 
    // One way to convert the number to a boolean would be: 
     has_cat = !!num_cats 
} 

I due valori Falsey più confusi sono probabilmente null e undefined.

null significa fondamentalmente che la variabile esiste, ma il suo valore è sconosciuto. undefined significa che la variabile non esiste (anche se una variabile può essere stabilita a undefined come var x = undefined; e quindi esiste la variabile x ma non è esplicitamente definita, il che significa che è possibile trattarla come se non esistesse. .

2

si chiama "valori truthy e falsy" se volete sapere come fare riferimento ad esso Ecco un link per spiegare la risposta alla tua domanda: http://www.sitepoint.com/javascript-truthy-falsy/ (tenere a mente quando si legge il link all'inizio che !! (valore) forza il valore a essere vero o falso)

+0

+1 per la tua risposta. –

0

Solo due dei valori che hai citato sono quelli che definirei "speciali" valori".

  • null - Nella maggior parte dei casi questo è equivalente a non applicabile.
  • undefined - La versione implicita di null

Un esempio per entrambi:

function findByTitle(arr, title) 
{ 
    for (var i = 0; i < arr.length; ++i) { 
     if (arr[i].title === title) { 
      return arr[i]; 
     } 
    } 
    return null; 
} 

Il valore di ritorno di null indica che il record non è stato trovato, altrimenti è un oggetto.

function increment(x, by) 
{ 
    return x + (by || 1); // by may be undefined 
} 

increment(4); // 5 

In questo caso, l'argomento by non si passa, quindi Javascript lo passa come undefined implicitamente. Non consiglierei di assegnarlo a una variabile; piuttosto, vorrei usare null.

Gli altri valori che hai citato non sono particolarmente speciali; possono essere utilizzati come valore iniziale, come la creazione di un valore stringa o il calcolo di una somma, ma non sono speciali di per sé.

  • "" è una stringa
  • false è un valore booleano
  • 0 e NaN sono numeri
0

La lista che avete sono 5 dei valori 6 "falsy" in javascript. Se aggiungi "NaN" a questo, avresti tutti i valori falsy in javascript. Quindi la completa lista "falsy" è

1)0 
2)"" 
3)false 
4)undefined 
5)null and 
6)NaN 

Quando utilizzato in un "if", questi tutti si comportano allo stesso modo in modo

if(0) 
if("") 
if(false) 
if(undefined) 
if(null) and 
if(NaN) would behave the same 

Avete chiesto una breve risposta concisa ma penso che il migliore modo mostra solo come funziona con alcuni test di base. Scuse per la risposta lunga

//Checking if all the "falsy" values evaluate the same way in a "if" statement 
console.log("Checking if(0)"); 
if(0) { 
    console.log(" if(0) Will not be reached"); 
} 

console.log('Checking if("")'); 
if("") { 
    console.log(' if("") Will not be reached'); 
} 

console.log("Checking if(undefined)"); 
if(undefined) { 
    console.log("if(undefined) Will not be reached"); 
} 

console.log("Checking if(null)"); 
if(null) { 
    console.log("if(null) Will not be reached"); 
} 

console.log("Checking if(Nan)"); 
if(NaN) { 
    console.log("if(NaN) Will not be reached"); 
} 

console.log("Checking if(false)"); 
if(false) { 
    console.log("if(false) Will not be reached"); 
} 

// Verificando tutti i valori falsy sono uguali (==) tra loro in un if

if(0 == "") { 
    console.log('if(0 == "") is true'); 
} 

if(0 == false) { 
    console.log("if(0 == false) is true"); 
} 

if("" == false) { 
    console.log('if("" == false) is true'); 
} 

if(0 == undefined) { 
    console.log("if(0 == undefined) Will not be reached"); 
} 

if("" == null) { 
    console.log('if("" == null) Will not be reached'); 
} 

if(undefined == null) { 
    console.log("if(undefined == null) is true"); 
} 

if(NaN == "") { 
    console.log('if(NaN == "") Will not be reached'); 
} 

// Controllo per strettamente uguaglianza tra falso e falsy valori if (undefined === false) { console.log ("Non sarà raggiunto"); }

if(null === false) { 
    console.log("Will not be reached"); 
} 

if(undefined ===false) { 
    console.log("Will not be reached"); 
} 

if(0 === false) { 
    console.log("Will not be reached"); 
} 

if("" === false) { 
    console.log("Will not be reached"); 
} 

if(NaN === false) { 
    console.log("Will not be reached"); 
} 

Ciò significa che se questi valori "falsy" potrebbero essere utilizzati in un "if" intercambiabile, tutti non sono uguali (==) all'altro (particolare l'insieme di 0," "e falso con gli altri tre). Se viene usato un più rigido uguale (====), nessuno di questi sarebbe uguale a falso, quindi forse la classificazione "falsy" invece di false.

Problemi correlati