重溫基礎 instanceof運算子

2021-09-02 19:13:32 字數 3116 閱讀 3335

最近開始在整理es6/es7/es8/es9的知識點(已經上傳到 我的部落格 上),碰到一些知識點是自己已經忘記(用得少的知識點),於是也重新複習了一遍。

這篇文章要複習的instanceof是我在整理過程中遇到的,那就整理下來吧,不然容易忘記。

要是**寫得不妥,歡迎各位大佬指點。

instanceof運算子用於測試建構函式的prototype屬性是否出現在物件的原型鏈中的任何位置。 —— mdn

簡單理解為:instanceof可以檢測乙個例項是否屬於某種型別。

比如:

function f ()

let a = new f ();

a instanceof f; // true

a instanceof object; // true 後面介紹原因

複製**

還可以在繼承關係中用來判斷乙個例項是否屬於它的父型別。

比如:

function f (){};

function g (){};

function q (){};

g.prototype = new f(); // 繼承

let a = new g();

a instanceof f; // true

a instanceof g; // true

a instanceof q; // false

複製**

語法為:object instanceof constructor

即:用instanceof運算子來檢測constructor.prototype是否存在引數object的原型鏈。

function f (){};

function g (){};

let a = new f ();

a instanceof f; // true 因為:object.getprototypeof(a) === f.prototype

a instanceof q; // false 因為:f.prototype不在a的原型鏈上

a instanceof object; // true 因為:object.prototype.isprototypeof(a)返回true

f.prototype instanceof object; // true,同上

複製**

注意

a instanceof f返回true以後,不一定永遠都都返回為truef.prototype屬性的值有可能會改變。

原表示式a的值也會改變,比如a.__proto__ = {}之後,a instanceof f就會返回false了。

檢測物件是不是特定建構函式的例項:

// 正確

if (!(obj instanceof f))

// 錯誤 因為

if (!obj instanceof f); // 永遠返回false

// 因為 !obj 在instanceof之前被處理 , 即一直使用乙個布林值檢測是否是f的例項

複製**

/**

* 實現instanceof

* @param obj 需要測試的物件

* @param fun 建構函式

*/function _instanceof(obj, fun)

}複製**

相同

instanceoftypeof都能用來判斷乙個變數的型別。

區別

instanceof只能用來判斷物件、函式和陣列,不能用來判斷字串和數字等:

let a = {};

let b = function () {};

let c = ;

let d = 'hi';

let e = 123;

a instanceof object; // true

b instanceof object; // true

c instanceof array; // true

d instanceof string; // false

e instanceof number; // false

複製**

typeof:用於判斷乙個表示式的原始值,返回乙個字串。

typeof 42;         // "number"

typeof 'blubber'; // "string"

typeof true; // "boolean"

typeof aa; // "undefined"

複製**

一般返回結果有:

判斷變數是否存在

不能使用:

if(a)

// uncaught referenceerror: a is not defined

複製**

原因是如果變數未定義,就會報未定義的錯,而應該使用:

if(typeof a != 'undefined')

複製**

mdn instanceof

ibm instanceof

js中typeof和instanceof用法區別

typeof運算子 instanceof運算子

typeof是乙個一元運算子,放在其單個運算元據的前邊,運算元據可以是任何型別。返回值是乙個型別字串。typeof運算子也可以加圓括號typeof x 這樣的它更像是乙個函式呼叫。任意值在tyoeof運算後的返回值x tepeof x undefined undefined null object ...

JS基礎 instanceof詳解

instanceof 運算子用於檢測建構函式的 prototype 屬性是否出現在某個例項物件的原型鏈上。語法 object instanceof constructor 引數object 某個例項物件 constructor 某個建構函式 定義建構函式 function c function d ...

js的in運算子與instanceof運算子

in運算子 希望他的左運算元是乙個字串或可以轉換為字串,希望他的右運算元是乙個物件。如果右運算元的物件擁有乙個名為左運算元值的屬性名,那麼表示式返回true.var point 定義乙個物件 x in point 返回為true 物件有乙個名為x的屬性 z in point 返回為false 物件沒...