1. 犀牛前端部落首页
  2. Javascript百科

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

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/1732.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注