一、toString()
toString()
方法返回一个表示该对象的字符串。
描述
Object.prototype.toString()
可以看出toString()
继承自Object
默认情况下,
toString()
方法被每个Object
对象继承
当该对象被表示为一个文本值时,或者一个对象以预期的字符串方式引用时自动调用。
二、Object.prototype.toString()方法判断数据类型的原理
如果
toString()
方法在自定义对象中未被覆盖,toString()
返回[object type]
,其中type
是对象的类型。
2.1. toString
方法没有被覆盖的情况
例如Object,Math他们直接调用toStirng()方法,可以直接判断出来数据类型
obj.toString(); // "[object Object]"
Math.toString(); // "[object Math]"
2.2. toString
方法被覆盖的情况
Number、Boolean、String、Array、Date、RegExp、Function这几种构造函数生成的对象,toString
方法都被覆盖了,所以他们无法使用toString()
方法获取数据类型
Boolean.prototype.hasOwnProperty("toString"); // true
String.prototype.hasOwnProperty("toString"); // true
Array.prototype.hasOwnProperty("toString"); // true
Date.prototype.hasOwnProperty("toString"); // true
RegExp.prototype.hasOwnProperty("toString"); // true
Function.prototype.hasOwnProperty("toString"); // true
var num = new Number("123sd");
num.toString(); // 'NaN'
var str = new String("12df");
str.toString(); // '12df'
var bool = new Boolean("fd");
bool.toString(); // 'true'
var arr = new Array(1, 2);
arr.toString(); // '1,2'
var d = new Date();
d.toString(); // "Sun Jul 22 2018 12:38:42 GMT+0800 (中国标准时间)"
var func = function () {};
func.toString(); // "function () {}"
其他(例如Object,Math)都是返回该对象的类型。
使用 toString() 检测对象类型
可以通过
toString()
来获取每个对象的类型。
为了每个对象都能通过
Object.prototype.toString()
来检测
需要以
Function.prototype.call()
或者Function.prototype.apply()
的形式来调用,传递要检查的对象作为第一个参数。
var toString = Object.prototype.toString;
toString.call(new Date()); // [object Date]
toString.call(new String()); // [object String]
toString.call(Math); // [object Math]
//Since JavaScript 1.8.5
toString.call(undefined); // [object Undefined]
toString.call(null); // [object Null]
网友评论