我們都知道Object.prototype.toString.call可以用來判斷變量的類型,在這之前我們可以使用typeof來簡單的判斷
typeof '123' // string typeof 123 // number typeof undefined // undefined typeof true // boolean
但是typeof也有一點局限性,typeof判斷數據類型,只能區分基本類型。對於null、array、function、object來說,使用typeof都會統一返回object字符串。
這個時候可以通過Object.prototype.toString方法,判斷某個對象之屬於哪種內置類型。
Object.prototype.toString.call(null); // "[object Null]" Object.prototype.toString.call(undefined); // "[object Undefined]" Object.prototype.toString.call(“abc”);// "[object String]" Object.prototype.toString.call(123);// "[object Number]" Object.prototype.toString.call(true);// "[object Boolean]"
在js中每個內置類型都有自己的toString方法。對於一個數組,它將返回所有用逗號連接的數組值
比如數組
const arr = [1,2,3,4,5] arr.toString() // returns "1,2,3,4,5"
它是通過Array.prototype.toString繼承而來
const arr = [1,2,3,4,5] Array.prototype.toString.call(arr) // returns "1,2,3,4,5"
Object的toString函數(對象的內置類型)正好返回對象的類型,格式為[Object type]的字符串。舉個例子
const arr = [1,2,3,4,5] Object.prototype.toString.call(arr) // returns "[object Array]" const str = 'test' str.toString() // returns 'test' Object.prototype.toString.call(str) // returns "[object String]"
由於每個類型都有自己的toString方法,根據原型鏈的原理這個方法沒法找到Object.prototype.toString就會已經找到。
如果你想知道它是否是一個數組,這是一種方法。toString方法駐留在Object的原型中。Call是一個允許您更改另一個函數上下文的函數。當您調用[].toString()時,它運行的是Array.prototype上toString方法。如果你想要object.prototype. tostring(即[object Type])的行為,那么你可以使用該函數。