Object.prototype.toString.call(obj)檢測數據類型
阿新 • • 發佈:2019-03-20
lean 相同 let prop 對象類型 一個 rop pre logs
typeof bar==‘object‘ 不能確切判斷數據是一個‘純粹’的對象 Array null的結果都是object
比較好的方法是:
Object.prototype.toString.call(bar)==‘[object Object]‘;
使用以上方法可以很好的區分各種類型:
console.log(Object.prototype.toString.call(""));//[object String] console.log(Object.prototype.toString.call(12));//[object Number] console.log(Object.prototype.toString.call(true));//[object Boolean] console.log(Object.prototype.toString.call(undefined));//[object Undefined] console.log(Object.prototype.toString.call(null));//[object Null] console.log(Object.prototype.toString.call({}));//[object Object] console.log(Object.prototype.toString.call(function(){}));//[object Function]console.log(Object.prototype.toString.call([]));//[object Array] console.log(Object.prototype.toString.call(new Date()));//[object Date] console.log(Object.prototype.toString.call(/\d/));//[object RegExp] function Person(){}; console.log(Object.prototype.toString.call(new Person));//[object Object]
toString()方法返回這個的對象的字符串
為什麽不用obj.toString(),obj.toString()的結果與object.prototype.toString.call(obj);的結果不一樣,為什麽呢?
這是因為toString為Object的原型方法,而Array funciton等類型作為Object的實例,都重寫了toString方法。不同的對象類型調用toString方法時,調用的是重寫後的toStirng方法。
可以驗證一下:
let arr=[2,3,4];
console.log(Array.prototype.toString.call(arr));//‘[object,Array]‘
console.log(Array.prototype.hasOwnProperty(‘toString‘));//true console.log(arr.toString());//2,3,4 delete Array.prototype.toString console.log(arr.toString());//‘[object,Array]‘
刪除了Array的toString方法後,同樣再采用arr.toString()方法調用時,不再有屏蔽Object源性方法的實例方法,因此沿著原型鏈,arr調用了Object的toString方法,返回了和Array.prototype.toString.call(arr);相同的結果。
參考:https://www.cnblogs.com/youhong/p/6209054.html
Object.prototype.toString.call(obj)檢測數據類型