Object.prototype.toString方法的原理
判断一个对象属于哪个内置类型,我们会用以下的方法:1
2var 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()
方法重写了,所以要使用上面那种形式检测