淺談JS中的typeof和instanceof的區別


JS中的typeof和instanceof常用來判斷一個變量是否為空,或者是什么類型。

typeof

typeof運算符返回一個用來表示表達式的數據類型的字符串。

typeof一般返回以下幾個字符串:

"number", "string","boolean","object","function","undefined"

對於Array,Null等特殊對象使用typeof一律返回object,這正是typeof的局限性。

 

我們可以使用typeof來判斷一個變量是否存在,if(typeof a!= "undefined"), 而不要去使用if(a),因為a不存在(未聲明)會報錯。

 

instanceof

instanceof用來檢測某個對象是不是另一個對象的實例。

官方的話:該運算發用來測試一個對象在其原型鏈中是否存在一個構造函數prototype屬性

var a = new Array();

console.log(a instanceof Array);    // 會返回 true
console.log(a instanceof Object);    // 也會返回 true

因為Array是object 的子類
function Foo(){}
Foo.prototype = new Aoo();  // 原型繼承
var foo = new Foo();
console.log(foo instanceof Foo)  //true
console.log(foo instanceof Aoo)  //true

instanceof不僅可以判斷一層繼承關系,也可以判斷多層繼承關系
var a = new Array();
if(a instanceof Object)              // 返回true
if(window instanceof Object)    // 返回false

typeof(window)  //會得到object

需要注意的是,如果表達式 obj instanceof Foo 返回true,則並不意味着該表達式會永遠返回ture,因為Foo.prototype屬性的值有可能會改變,改變之后的值很有可能不存在於obj的原型鏈上,這時原表達式的值就會成為false
var a = new Array();
if(a instanceof Object)              // 返回true
if(window instanceof Object)    // 返回false

typeof(window)  //會得到object

需要注意的是,如果表達式 obj instanceof Foo 返回true,則並不意味着該表達式會永遠返回ture,因為Foo.prototype屬性的值有可能會改變,改變之后的值很有可能不存在於obj的原型鏈上,這時原表達式的值就會成為false

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM