Object.prototype.toString.call
我们都知道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])的行为,那么你可以使用该函数。