Javascript中检查数据类型一直是老生常谈的问题,今天俺看了一篇国外的文章总结了实际开发中常见的几种技巧,俺觉得讲的很不错,因此跟大家一起分享。
检查js中数据类型不是想的那么简单。js语言中本身提供了typeof 运算符,typeof操作符返回一个字符串,表示未经计算的操作数的类型。typeof操作符返回一个字符串,表示未经计算的操作数的类型。
然而,javascript数据类型和typeof运算符并不完美。很多时候都不是我们预想的结果, 例如,对于数组和null,返回“object”。如果想要检查原始数据类型之外的任何内容,我们可能一些额外的检查技巧,例如判断构造函数。
String
字符串总是一个字符串,所以检查字符串很简单。 如果使用new(new String)调用,typeof将返回“object”。 所以也要包含那些可以使用的字符串instanceof。
function isString (value) {
return typeof value === 'string' || value instanceof String;
}
Number
从typeof中得到的不仅仅是一个普通的数字,还会返回“number”,比如NaN和Infinity。要知道一个值是否真的是一个数字,还需要使用isFinite来判断数字是否有限。
function isNumber (value) {
return typeof value === 'number' && isFinite(value);
}
Array
在javascript中,数组不像在java和其他语言中那样是真正的数组。它们实际上是对象,typeof会为它们返回"object"要知道某个东西是否真的是数组,可以将其构造函数与数组进行比较。
function isArray (value) {
return value && typeof value === 'object' && value.constructor === Array;
}
// ES5可以使用该方法 IE9以上
Array.isArray(value);
Function
在js中判断函数使用typeof就可以了。
function isFunction (value) {
return typeof value === 'function';
}
Object
javascript中的很多东西都是对象。要知道一个值是否是一个可以具有属性并循环遍历的对象,可以将其构造函数与对象进行比较。它不适用于用class创建的对象,使用class创建的对象可以使用instanceof操作符来判断。
function isObject (value) {
return value && typeof value === 'object' && value.constructor === Object;
}
Null 和 undefined
大多数时候,您不需要显式地检查null和undefined,因为它们都是假值。不过,在下面的函数中这样做就可以了。
// Returns if a value is null
function isNull (value) {
return value === null;
}
// Returns if a value is undefined
function isUndefined (value) {
return typeof value === 'undefined';
}
Boolean
对于boolean typeof检查符也足够用来检查了。
// Returns if a value is a boolean
function isBoolean (value) {
return typeof value === 'boolean';
}
RegExp
RegExp是对象,因此唯一需要检查的是构造函数是否为RegExp。
// Returns if a value is a regexp
function isRegExp (value) {
return value && typeof value === 'object' && value.constructor === RegExp;
}
Error
javascript中的错误与许多其他编程语言中的“异常”相同。它们有两种不同的形式,例如Error、TypeError和RangeError。对于它们来说,一个instanceof语句就足够了,但是为了确保我们还检查了错误具有的“message”属性。
// Returns if value is an error object
function isError (value) {
return value instanceof Error && typeof value.message !== 'undefined';
}
Date
Date在javascript中并不是真正的数据类型。但是要知道某个对象是否是Date对象,可以使用instanceof进行检查。
// Returns if value is a date object
function isDate (value) {
return value instanceof Date;
}
Symbol
ES6新增的Symbol,用typeof就足够了。
// Returns if a Symbol
function isSymbol (value) {
return typeof value === 'symbol';
}
欢迎大家一起学习讨论,欢迎访问我的博客。
原文链接:https://www.pipipi.net/code/1...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。