1. 程式人生 > >Object.prototype.toString.call(obj)檢測數據類型

Object.prototype.toString.call(obj)檢測數據類型

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)檢測數據類型