js中檢查數據類型最佳實踐

Javascript中檢查數據類型一直是老生常談的問題,今天俺看了一篇國外的文章總結了實際開發中常見的幾種技巧,俺以爲講的很不錯,所以跟你們一塊兒分享。javascript

檢查js中數據類型不是想的那麼簡單。js語言中自己提供了typeof 運算符,typeof操做符返回一個字符串,表示未經計算的操做數的類型。typeof操做符返回一個字符串,表示未經計算的操做數的類型。html

然而,javascript數據類型和typeof運算符並不完美。不少時候都不是咱們預想的結果, 例如,對於數組和null,返回「object」。若是想要檢查原始數據類型以外的任何內容,咱們可能一些額外的檢查技巧,例如判斷構造函數。
String
字符串老是一個字符串,因此檢查字符串很簡單。 若是使用new(new String)調用,typeof將返回「object」。 因此也要包含那些可使用的字符串instanceof。java

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檢查符也足夠用來檢查了。.net

// Returns if a value is a boolean
function isBoolean (value) {
   return typeof value === 'boolean';
}

RegExp
RegExp是對象,所以惟一須要檢查的是構造函數是否爲RegExp。code

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

相關文章
相關標籤/搜索