Object.prototype.toString.call()方法 来进行类型判断
Object.prototype.toString() 的调用
对于 Object.prototype.toString()
方法,会返回一个形如 "[object XXX]"
的字符串。
如果对象的 toString()
方法未被重写,就会返回如上面形式的字符串。
({}).toString(); // => "[object Object]"
Math.toString(); // => "[object Math]"
但是,大多数对象,toString()
方法都是重写了的,这时,需要用 call()
方法来调用
任何对象object都可以通过this绑定调用Object.prototype.toString()方法吗?答案是可以,结果如下
Object.prototype.toString.call({}); <!--"[object Object]"--> Object.prototype.toString.call([]); <!--"[object Array]"--> Object.prototype.toString.call(function(){}); <!--"[object Function]"--> Object.prototype.toString.call(''); <!--"[object String]"--> Object.prototype.toString.call(1); <!--"[object Number]"--> Object.prototype.toString.call(true); <!--"[object Boolean]"--> Object.prototype.toString.call(null); <!--"[object Null]"--> Object.prototype.toString.call(undefined); <!--"[object Undefined]"--> Object.prototype.toString.call(); <!--"[object Undefined]"--> Object.prototype.toString.call(new Date()); <!--"[object Date]"--> Object.prototype.toString.call(/at/); <!--"[object RegExp]"-->
从上述代码可以看到,因为Object是所有子类的父类,所以任何类型的对象object都可以通过this绑定调用Object.prototype.toString()方法,返回该对象的字符串表示!
通过Object.prototype.toString.call(obj)
,输出的是[object xxx]
字符串,可以利用这一特点进行类型的精确判断,这里的call
的作用就是将toString()内部的this指向obj
。