1.Object.prototype.toString.call()
Object.prototype.toString.call(任意類型的值),返回一個(gè)字符串 '[object 類型]',這種方法對(duì)所有數(shù)據(jù)類型都能判斷,即使是null或者undefined;
Object.prototype.toString.call('An') // "[object String]"
Object.prototype.toString.call(1) // "[object Number]"
Object.prototype.toString.call(Symbol(1)) // "[object Symbol]"
Object.prototype.toString.call(null) // "[object Null]"
Object.prototype.toString.call(undefined) // "[object Undefined]"
Object.prototype.toString.call(function(){}) // "[object Function]"
Object.prototype.toString.call({name: 'An'}) // "[object Object]"
instanceof
instanceof的內(nèi)部機(jī)制是判斷目標(biāo)對(duì)象的原型鏈?zhǔn)遣皇悄苷业絧rototype.
使用instanceof判斷一個(gè)對(duì)象是不是數(shù)組,instanceof會(huì)判斷這個(gè)對(duì)象的原型鏈上有沒有數(shù)組的原型,找到就返回true,否則返回false
[] instanceof Array //true
var x={}
x instanceof Array //false
x.__proto__=Array.prototype
x instanceof Array //true
instanceof 算法機(jī)制
function instance_of(L,R){
var O=R.prototype;
L=L.__proto__;
while(true){
if(L===null){
return false;
}
if(O===L){
return true;
}
L=L.__proto__;
}
}
3.Array.isArray()
- 功能主要是判讀是否是數(shù)組
Array.isArray()與Object.prototype.toString.call()
Array.isArray()是es6新增的語法,當(dāng)不存在Array.isArray()方法時(shí),可以用Object.prototype.toString.call()實(shí)現(xiàn),Array.isArray()的polyfill 通常如下
if(!Array.isArray){
Array.isArray=function(arr){
return Object.prototype.toString.call(arr)==='[object Array]';
}
}