js instanceof、typeof、Object.prototype.toString.call(obj)的用法和區別

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]"

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章