2014-12-25 19 views
14

Ho provato $(document) === $(document) ma ho trovato il risultato è false ..

Qualcuno ha idee su questo?

+9

la stessa ragione '{} === {}' restituisce false, non ci saranno mai due oggetti uguali tra loro a meno che non siano esattamente lo stesso oggetto, cioè 'a = b = {}; a === b' –

+1

Spiegare il motivo della riapertura. –

risposta

18

Quando si utilizza jQuery si ottiene un oggetto JS. Questo oggetto è totalmente diverso ogni volta che usi il selettore jQuery.

Per capire meglio, ho giocato in console con alcuni array:

a = [1, 2] 
[1,2] 
b = [1, 2] 
[1,2] 
a == b 
false 
a === b 
false 

Quando si utilizza jQuery è proprio come l'utilizzo di oggetti, perché non si ottiene un elemento DOM in risposta (forse che perché ti sei confuso)

Come puoi farlo?

Se si vuole confrontare 2 jQuery oggetti è possibile utilizzare il metodo is() jQuery:

$(document).is($(document)) 
true 
19

Perché in cima jQuery, ogni chiamata ($() o jQuery()) ad esso restituisce nuova istanza:

return new jQuery.fn.init(selector, context); 

Quindi tutte le istanze di jQuery (anche per stessi selettori) sono sempre diversi (ad esempio $("#id") === $("#id")//false)

È possibile controllare il codice sorgente (Linea 78) di jQuery 2.1.0

Ma se lo metti alla variabile, è possibile ottenere una parità:

var d, d_copy; 

d = $(document); 

d_copy = d; 

d_copy === d; //true 
5

Ogni volta che si seleziona l'elemento document utilizzando jQuery, si è data una nuova selezione di tale elemento incapsulato in un oggetto jQuery.

Pertanto, la prima chiamata a $(document) seleziona l'elemento document nel DOM e fornisce una nuova istanza di un oggetto jQuery che contiene tale selezione. La seconda selezione ti offre un'altra istanza di un oggetto jQuery che incapsula lo stesso elemento document. Sebbene questi oggetti jQuery abbiano effettivamente membri di dati identici, sono due oggetti distinti che incapsulano l'elemento DOM document.