js中检查数据类型最佳实践

38次阅读

共计 2201 个字符,预计需要花费 6 分钟才能阅读完成。

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…

正文完
 0