js裏instanceof和typeof、Object.prototype.toString.call()方法都可以用來判斷變量的類型。
1、instanceof
官方文檔說明:instanceof
運算符用來測試一個對象在其原型鏈中是否存在一個構造函數的 prototype
屬性。
語法:
object instanceof constructor
instanceof 運算符用來判斷 constructor.prototype 是否存在object的原型鏈上。
function A(){};
function B(){};
var a = new A();
a instanceof A; //true
a instanceof B; //false
2、typeof
語法:
typeof variable 或 typeof(variable)
官方文檔說明:typeof
操作符返回一個字符串,指示未經計算的操作數的類型。
下表總結了typeof
可能的返回值。
類型 | 結果 |
---|---|
Undefined | "undefined" |
Null | "object" |
Boolean | "boolean" |
Number | "number" |
String | "string" |
Symbol (ECMAScript 6 新增) | "symbol" |
宿主對象(由JS環境提供) | Implementation-dependent |
函數對象([[Call]] 在ECMA-262條款中實現了) | "function" |
任何其他對象 | "object" |
typeof 無法判斷 array。
3、Object.prototype.toString.call(obj)
Object.prototype.toString.call(obj)返回obj的類型字符串。
語法:
function A(){};
var a = new A()
Object.prototype.toString.call(a)
//result:"[object Object]"
Object.prototype.toString.call(A)
//result:"[object Function]"
Object.prototype.toString.call(1)
//result:"[object Number]"
Object.prototype.toString.call('a')
//result:"[object String]"
Object.prototype.toString.call()
//result:"[object Undefined]"
var b = [1,2,3]
Object.prototype.toString.call(b)
//result:"[object Array]"