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])的行为,那么你可以使用该函数。

posted on 2021-12-04 17:52  smallpen  阅读(814)  评论(0编辑  收藏  举报