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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章