Object.prototype.toString

Object.prototype.toString方法的原理
判断一个对象属于哪个内置类型,我们会用以下的方法:

1
2
var arr = [];
console.log(Object.prototype.toString.call(arr)) //"[object Array]"

在es5中,在toString方法被执行的时候,会执行以下步骤:

  • 1.如果this的值是undefined,就返回[object Undefined],
  • 2.如果this的值是null,就返回[object Null],
  • 3.让O成为ToObject(this)的结果
  • 4.让class成为O的内部属性[[Class]]的结果
  • 5.返回三个字符串"[object ", class, 以及 "]"连接后的新字符串.

[[Class]]是一个内部属性,所有的对象(原生对象和宿主对象)都拥有该属性.在规范中,[[Class]]是这么定义的

内部属性 描述
[[Class]] 一个字符串值,表明了该对象的类型.

所有宿主对象的[[Class]]属性的值可以是除了”Arguments”, “Array”, “Boolean”, “Date”, “Error”, “Function”, “JSON”, “Math”, “Number”, “Object”, “RegExp”, “String”之外的的任何字符串.[[Class]]内部属性是引擎内部用来判断一个对象属于哪种类型的值的

对象的类属性:表示对象的类型信息

只有一种间接的方法查询对象的类属性,就是使用默认的toString()方法(继承自Object.prototype),并返回如下格式的字符串:
[object class]
由于很多对象继承的toString()方法重写了,所以要使用上面那种形式检测

文章目录