JavaScript代碼中如何讓typeof一個對象更靠譜,我通常這麼處理

點擊上方藍字關注“小鄭搞碼事”,每天都能學到知識,搞懂一個問題!

首先,我們知道在ECMAScript中有5種基本數據類型(undefined,Null,Boolean,Number和String)。還有一種複雜的數據類型(Object)。鑑於ECMAScript是鬆散類型,因此需要有一種手段來檢測給定變量的數據類型,然而,typeof就是負責提供這方面信息的操作符。

對一個值使用typeof操作符可能返回下列某個字符串:

  1. "undefined" - 如果這個值未定義

  2. "boolean" - 如果這個值布爾值

  3. "string" - 如果這個值是字符串

  4. "number" - 如果這個值是數值

  5. "object" -如果這個值是對象或null

  6. "function" -如果這個值是函數

知道了上面這些知識點之後,下面,進入今天要講的重點內容。

在工作中,我們時常需要去檢測一個值是否是一個對象,通過上面分析,如果直接使用typeof會存在一些缺陷。然而,如何才能讓這個判斷代碼輸出結果符合我的意願呢?需要考慮三個點。

從最基本的這個判斷函數開始:

JavaScript代碼中如何讓typeof一個對象更靠譜,我通常這麼處理

第一個點,Null類型需要排除

null值表示的是一個空對象指針,也就是說:

console.log(isObject(null))

輸出:true

這不是我們需要的,所以我們將代碼改成下面這樣子:

JavaScript代碼中如何讓typeof一個對象更靠譜,我通常這麼處理

這樣的話,就將str為null判斷成object的情況過濾掉了。

第二個點,function需要考慮成object

函數通過typeo返回的是一個字符串function。如下所示:

JavaScript代碼中如何讓typeof一個對象更靠譜,我通常這麼處理

大多數情況下,可能這是我們期望的情況,但有時候我們希望將函數考慮成輸出ture的情況。我們的代碼可以這麼改:

JavaScript代碼中如何讓typeof一個對象更靠譜,我通常這麼處理

最加了一個typeof(str)全等於function。

第三個點,Array不需要考慮成object

數組通過typeof返回的是一個字符串object。如下所示:

JavaScript代碼中如何讓typeof一個對象更靠譜,我通常這麼處理

因為數組確實也是一個對象呀,同樣在大多數情況下,這也是我們期望的情況 ,但是,有時候我需要將數組考慮輸出false的情況,可以往isObject函數里再加一行代碼:

JavaScript代碼中如何讓typeof一個對象更靠譜,我通常這麼處理

為什麼要分上面這三點來講一下了?這樣一來,我們可以根據自己的實際情況來考慮需要過慮哪種類型,自由組合代碼。

如果同時需要對空值,數組,函數返回false,只讓對象返回true,下面這麼搞,會更簡單。

JavaScript代碼中如何讓typeof一個對象更靠譜,我通常這麼處理

沒錯,利用contructor指向來判斷。

總結一下:

對於一些這樣的判斷,在應用層面,也可以使用一些現有庫封裝好的函數,或者新標準提供的函數。


分享到:


相關文章: