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
