Object.prototype.toString.call()
一、Object.prototype.toString() 的调用
对于 Object.prototype.toString() 方法,会返回一个形如 "[object XXX]" 的字符串。
如果对象的 toString() 方法未被重写,就会返回如上面形式的字符串。
({}).toString();// => "[object Object]"Math.toString();// => "[object Math]"
但是,大多数对象,toString() 方法都是重写了的,这时,需要用 call() 或 Reflect.apply() 等方法来调用。
Object.prototype.toString.call(x);// => "[object Object]"
二、Object.prototype.toString() 的原理
对于 Object.prototype.toString.call(arg),若参数为 null 或 undefined,直接返回结果。
Object.prototype.toString.call(null);// => "[object Null]"
Object.prototype.toString.call(undefined);// => "[object Undefined]"
若参数不为 null 或 undefined,则将参数转为对象,再作判断。对于原始类型,转为对象的方法即装箱,此处不赘述。
转为对象后,取得该对象的 [Symbol.toStringTag] 属性值(可能会遍历原型链)作为 tag,如无该属性,或该属性值不为字符串类型,则依下表取得 tag, 然后返回 "[object " + tag + "]" 形式的字符串。
应用判断数据类型
上一篇下一篇