JavaScript 判断数据类型

toString 方法的主要用途是返回对象的字符串形式,除此之外,还有一个重要的作用,就是判断一个值的类型。

var o = {};
o.toString(); // "[object Object]"

上面代码调用空对象的 toString 方法,结果返回一个字符串 object Object,其中第二个 Object 表示该值的准确类型。这是一个十分有用的判断数据类型的方法。

实例对象的 toString 方法,实际上是调用 Object.prototype.toString 方法。使用 call 方法,可以在任意值上调用 Object.prototype.toString 方法,从而帮助我们判断这个值的类型。不同数据类型的 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.prototype.toString.call(2) // "[object Number]"
Object.prototype.toString.call('') // "[object String]"
Object.prototype.toString.call(true) // "[object Boolean]"
Object.prototype.toString.call(undefined) // "[object Undefined]"
Object.prototype.toString.call(null) // "[object Null]"
Object.prototype.toString.call(Math) // "[object Math]"
Object.prototype.toString.call({}) // "[object Object]"
Object.prototype.toString.call([]) // "[object Array]"

可以利用这个特性,写出一个比 typeof 运算符更准确的类型判断函数。

var type = function (o){
  var s = Object.prototype.toString.call(o);
  return s.match(/\[object (.*?)\]/)[1].toLowerCase();
};

type({}); // "object"
type([]); // "array"
type(5); // "number"
type(null); // "null"
type(); // "undefined"
type(/abcd/); // "regex"
type(new Date()); // "date"

在上面这个 type 函数的基础上,还可以加上专门判断某种类型数据的方法。

['Null',
 'Undefined',
 'Object',
 'Array',
 'String',
 'Number',
 'Boolean',
 'Function',
 'RegExp',
 'NaN',
 'Infinite'
].forEach(function (t) {
    type['is' + t] = function (o) {
        return type(o) === t.toLowerCase();
    };
});

type.isObject({}) // true
type.isNumber(NaN) // true
type.isRegExp(/abc/) // true
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容