543 Stimmen

Was ist der Unterschied zwischen typeof und instanceof und wann sollte das eine im Gegensatz zum anderen verwendet werden?

In meinem speziellen Fall:

callback instanceof Function

または

typeof callback == "function"

Spielt das überhaupt eine Rolle, was ist der Unterschied?

Zusätzliche Ressource:

JavaScript-Garten typeof gegen instanceof

9voto

Sandeep Amarnath Punkte 2667

typeof : Gemäß der MDN-Dokumentation ist typeof ein unärer Operator, der eine Zeichenkette zurückgibt, die den Typ des nicht ausgewerteten Operanden angibt.

Im Fall von String-Primitiven und String-Objekten gibt typeof Folgendes zurück

const a = "I'm a string primitive";
const b = new String("I'm a String Object");

typeof a; --> returns 'string'
typeof b; --> returns 'object'

instanceof : ist ein binärer Operator, der ein Objekt und einen Konstruktor akzeptiert. Sie gibt einen booleschen Wert zurück, der angibt, ob das Objekt den angegebenen Konstruktor in seiner Prototypenkette hat oder nicht. .

Bei Anwendung auf die obigen String-Instanzen und im Vergleich zu String verhält es sich wie folgt:

const a = "I'm a string primitive";
const b = new String("I'm a String Object");

a instanceof String; --> returns false
b instanceof String; --> returns true

Referenz: https://bambielli.com/til/2017-06-18-typeof-vs-instanceof/

9voto

newacct Punkte 114757

instanceof funktioniert auch, wenn callback ist ein Subtyp von Function denke ich.

9voto

Andere Bedeutende praktische Unterschiede:

// Boolean

var str3 = true ;

alert(str3);

alert(str3 instanceof Boolean);  // false: expect true  

alert(typeof str3 == "boolean" ); // true

// Number

var str4 = 100 ;

alert(str4);

alert(str4 instanceof Number);  // false: expect true   

alert(typeof str4 == "number" ); // true

5voto

levik Punkte 108445

instanceof in Javascript kann unzuverlässig sein - ich glaube, die meisten Frameworks versuchen, seine Verwendung zu vermeiden. Verschiedene Windows ist eine der Möglichkeiten, in denen es brechen kann - ich glaube, Klassenhierarchien können es auch verwirren.

Es gibt bessere Methoden, um zu prüfen, ob ein Objekt einem bestimmten eingebauten Typ entspricht (was in der Regel das ist, was Sie wollen). Erstellen Sie Hilfsfunktionen und verwenden Sie sie:

function isFunction(obj) {
  return typeof(obj) == "function";
}
function isArray(obj) {
  return typeof(obj) == "object" 
      && typeof(obj.length) == "number" 
      && isFunction(obj.push);
}

Und so weiter.

4voto

vitaly-t Punkte 22010

Wenn man nach einer Funktion sucht, muss man immer typeof .

Hier ist der Unterschied:

var f = Object.create(Function);

console.log(f instanceof Function); //=> true
console.log(typeof f === 'function'); //=> false

f(); // throws TypeError: f is not a function

Aus diesem Grund darf man niemals instanceof um nach einer Funktion zu suchen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X