2015-04-17 14 views
6

Spesso vedo che quando una funzione deve essere chiamata con parametri associati in nessun contesto particolare, lo undefined è più spesso che preferibile rispetto allo null come scelta di contesto, come in:qual è il vantaggio del collegamento a `undefined` invece di` null`

f.call(undefined, param1, param2) 

è preferito su:

f.call(null, param1, param2) 

mi chiedo se non v'è alcun motivo particolare per questo?

+0

Preferenza. È solo una questione di gusti. –

+0

Per ulteriori dettagli: http://stackoverflow.com/questions/5076944/che-è-la differenza- tra -null-and-undefined-in-javascript E http://saladwithsteve.com/2008/02/javascript -undefined-vs-null.html –

+0

null significa che c'è un oggetto senza valore, mentre undefined significa che non c'è nulla. Questo concetto esiste solo in js, per quanto ne so. – mondjunge

risposta

6

Qual è il vantaggio del collegamento a undefined anziché null?

Non credo ci sia. Da 10.4.3 Entering Function Code:

  1. Se il codice funzione è strict code, impostare il ThisBinding-thisArg.
  2. Altrimenti se thisArg è nullo o indefinito, impostare il ThisBinding all'oggetto globale.
  3. ...

Quindi, se il codice non è rigida, in entrambi i casi this sarà impostato all'oggetto globale.

Ma se il codice è rigoroso, this sarà in realtà null o undefined. f potrebbe essere implementato per distinguere questi casi, ma quello non sembra essere uno scenario molto probabile per me.

+1

Vedo, grazie. Quindi potrei usare 'null' come ho fatto prima dato che considero' indefinito' come qualcosa che non ho toccato e cerco di evitarlo nelle mie applicazioni, mentre 'null' significa che il valore è stato impostato di proposito . Come sto chiamando la funzione sto impostando il contesto apposta. –

+1

Mi sembra molto ragionevole! (è così che lo faccio anch'io) –

+1

Solo per completezza, un estratto dalla terza edizione di ecma script http://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262, % 203rd% 20edition,% 20Dicembre% 201999.pdf 'Il chiamante fornisce questo valore. Se il valore fornito dal chiamante non è un oggetto (incluso nel caso in cui è nullo), il valore è l'oggetto globale' – Olga

1

In javascript, undefined si estende oltre lo scenario in cui non è stato impostato un valore. Ad esempio, se stai cercando una proprietà su un modello che non esiste, produrrà indefinito.

Non è così strano né di avere il codice come questo:

var k;

// fare qualcosa (k possibilmente impostazione)

alert (k);

Se il valore non è stato impostato, sarà indefinito anziché null.

Per farla breve, è ancora una preferenza, ma utilizzando indefinito è più probabile che si accorgano dei casi in cui i valori non sono stati inizializzati o si prova ad accedere alle proprietà di oggetti che non esistono.

Non sicuro che questo risponda alla tua domanda.

+0

Ciò non spiega in realtà perché uno utilizzerebbe l'altro nel contesto di ' .call'. –

+1

grazie, ma non risponde alla mia domanda dato che sono abbastanza bravo a distinguere 'null' da' undefined' :) –

+0

Sono d'accordo sul fatto che sia più in linea con il concetto. L'idea potrebbe essere che, poiché una funzione associata non può dare alcun valore per "this" (e "null" è in realtà un valore per sé), che "indefinito" ha più senso (sorta di "nessun valore, poiché non ha valore importa "[assumendo null come valore per nessun riferimento all'oggetto, in contrapposizione a nessun valore valido]). –

Problemi correlati