Underscore.js _.isObject = Funktion (obj) {return obj === Objekt (obj); };

8

Wenn wir den Underscore.js-Quellcode anzeigen, können wir Folgendes sehen:

%Vor%

Ich weiß, dass es funktioniert.

Aber warum nicht:

%Vor%

?

    
gongeek 08.05.2014, 15:08
quelle

2 Antworten

4
  

Warum nicht typeof obj === "object"

verwenden?

Weil wir das nicht testen wollten. Die Funktion _.isObject soll zurückgeben, ob das Argument ein Referenzwert ist (d. H. Ein Objekt, zu dem Sie Eigenschaften hinzufügen können) und ob es kein primitiver Wert ist.

Der Operator typeof ist dafür nicht verlässlich. Es liefert auch "object" für den Wert null und ergibt nicht "object" für aufrufbare Objekte (d. H. Funktionen).

Stattdessen können wir die Funktion Object verwenden, die versuchen wird, ihr Argument zu "werfen" ein Objekt über ToObject und liefert das Argument genau dann, wenn es bereits ein Objekt ist.

    
Bergi 08.05.2014, 15:57
quelle
7

Der Unterschied ist mit dem kniffligen Wert null . typeof null gibt 'object' zurück, was offensichtlich ziemlich verwirrend ist und nicht das gewünschte Ergebnis.

Wenn Sie jedoch den Objektkonstruktor mit null verwenden, wird ein neues Objekt erstellt (siehe MDN ). Das bedeutet, dass Sie zwischen Objekten und null unterscheiden können, was typeof nicht kann.

    
lonesomeday 08.05.2014 15:17
quelle

Tags und Links