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