不同数据类型的Object.prototype.toString
方法返回值如下:
- 数值:返回
[object Number]
。
- 字符串:返回
[object String]
。
- 布尔值:返回
[object Boolean]
。
- undefined:返回
[object Undefined]
。
- null:返回
[object Null]
。
- 数组:返回
[object Array
]。
- arguments 对象:返回
[object Arguments]
。
- 函数:返回
[object Function]
。
- Error 对象:返回
[object Error]
。
- Date 对象:返回
[object Date]
。
- RegExp 对象:返回
[object RegExp]
。
- 其他对象:返回
[object Object]
。
这就是说,Object.prototype.toString 可以看出一个值到底是什么类型。
1 2 3 4 5 6 7 8
| Object.prototype.toString.call(2); Object.prototype.toString.call(""); Object.prototype.toString.call(true); Object.prototype.toString.call(undefined); Object.prototype.toString.call(null); Object.prototype.toString.call(Math); Object.prototype.toString.call({}); Object.prototype.toString.call([]);
|
利用这个特性,可以写出一个比typeof
运算符更准确的类型判断函数。
1 2 3 4 5 6 7 8 9 10 11
| var type = function (o) { var s = Object.prototype.toString.call(o); return s.match(/\[object (.*?)\]/)[1].toLowerCase(); }; type({}); type([]); type(5); type(null); type(); type(/abcd/); type(new Date());
|
在上面这个 type 函数的基础上,还可以加上专门判断某种类型数据的方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| var type = function (o) { var s = Object.prototype.toString.call(o); return s.match(/\[object (.*?)\]/)[1].toLowerCase(); };
[ "Null", "Undefined", "Object", "Array", "String", "Number", "Boolean", "Function", "RegExp", ].forEach(function (t) { type["is" + t] = function (o) { return type(o) === t.toLowerCase(); }; });
type.isObject({}); type.isNumber(NaN); type.isRegExp(/abc/);
|