最近開始在整理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
以後,不一定永遠都都返回為true
,f.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)
}複製**
相同:
instanceof
和typeof
都能用來判斷乙個變數的型別。
區別:
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 物件沒...