instanceof
操作符用來比較兩個操作數(shù)的構造函數(shù)。只有在比較自定義的對象時才有意義。
如果用來比較內(nèi)置類型,將會和 typeof
操作符 一樣用處不大。
function Foo() {}
function Bar() {}
Bar.prototype = new Foo();
new Bar() instanceof Bar; // true
new Bar() instanceof Foo; // true
// 如果僅僅設置 Bar.prototype 為函數(shù) Foo 本身,而不是 Foo 構造函數(shù)的一個實例
Bar.prototype = Foo;
new Bar() instanceof Foo; // false
new String('foo') instanceof String; // true
new String('foo') instanceof Object; // true
'foo' instanceof String; // false
'foo' instanceof Object; // false
有一點需要注意,instanceof
用來比較屬于不同 JavaScript 上下文的對象(比如,瀏覽器中不同的文檔結構)時將會出錯,
因為它們的構造函數(shù)不會是同一個對象。
instanceof
操作符應該僅僅用來比較來自同一個 JavaScript 上下文的自定義對象。
正如 typeof
操作符一樣,任何其它的用法都應該是避免的。