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

3voto

Robert Deml Punkte 11970

Verwenden Sie instanceof, denn wenn Sie den Namen der Klasse ändern, erhalten Sie einen Compilerfehler.

2voto

Barney Punkte 15769

Ein signifikanter praktischer Unterschied:

var str = 'hello word';

str instanceof String   // false

typeof str === 'string' // true

Fragen Sie mich nicht warum.

1voto

xgqfrms Punkte 7010
var newObj =  new Object;//instance of Object
var newProp = "I'm xgqfrms!" //define property
var newFunc = function(name){//define function 
    var hello ="hello, "+ name +"!";
    return hello;
}
newObj.info = newProp;// add property
newObj.func = newFunc;// add function

console.log(newObj.info);// call function
// I'm xgqfrms!
console.log(newObj.func("ET"));// call function
// hello, ET!

console.log(newObj instanceof Object);
//true
console.log(typeof(newObj));
//"object"

1voto

Laszlo Sarvold Punkte 498

Nach Angaben von MDN-Dokumentation über typeof Objekte, die mit dem Schlüsselwort "new" instanziiert werden, sind vom Typ "object":

typeof 'bla' === 'string';

// The following are confusing, dangerous, and wasteful. Avoid them.
typeof new Boolean(true) === 'object'; 
typeof new Number(1) === 'object'; 
typeof new String('abc') === 'object';

Während Dokumentation über instanceof weist darauf hin:

const objectString = new String('String created with constructor');
objectString instanceOf String; // returns true
objectString instanceOf Object; // returns true

Wenn man also z.B. prüfen will, ob etwas eine Zeichenkette ist, egal wie sie erstellt wurde, wäre es am sichersten, wenn man instanceof .

0voto

Sambhav Punkte 11

Um ganz genau zu sein instanceof sollte verwendet werden, wenn der Wert über den Konstruktor erzeugt wird (im Allgemeinen benutzerdefinierte Typen), z. B.

var d = new String("abc")

während typeof um Werte zu prüfen, die nur durch Zuweisungen erzeugt werden, z. B.

var d = "abc"

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