首頁 >web前端 >js教程 >Js判斷參數(String,Array,Object)是否為undefined或值為空_javascript技巧

Js判斷參數(String,Array,Object)是否為undefined或值為空_javascript技巧

WBOY
WBOY原創
2016-05-16 17:17:401683瀏覽

有時候我們會遇到這樣的情況:在一些前端控制項要提交資料到伺服器端的資料驗證過程中,需要判斷提交的資料是否為空。如果是普通表單的字串數據,只需要在trim 後判斷length 即可,而這裡需要的數據可以是各種不同的類型(數字、字串、數組、物件等等),透過JSON.stringify(data ) 進行序列化後再傳遞。

在這裡定義如下的資料值為「空值」:

•undefined
•null
•空白字串及純空白字串:''、'    ' 等。
•空數組:[]
•空物件:{}

對於除此以外的資料值,均認為不為空。

其中 null 和 undefined 很容易識別,但對於其他類型,我們必須得到其資料類型才能用相應的方法去檢測資料是否為空。最容易想到的方法就是利用typeof 運算子:

複製程式碼 程式碼如下:


程式碼如下:







if(typeof data === 'number') {
  //deal with numbers
}

但typeof 傳回的型別字串只有'object'、'function'、'number'、'boolean'、'string'、'undefined' 這六種,許多原生物件如Date、RegExp 物件無法與用{} 創建的對象進行區分。另外,typeof 對於一些基本資料型別如(String、Number、Boolean) 與其對應的基本包裝型別資料會分別傳回不同值,如:

複製程式碼

程式碼如下:console.log(typeof false); //'boolean' console.log(typeof new Boolean(false)); //'object'console.log(typeof 1); //'number'
console.log(typeof new Number(1)); // 'object'
console.log(typeof ''); //'string'
console.log(typeof new String('')); //'object'


這對我們的判斷也有一定的影響。

用 instanceof?這只能判斷對象,而且存在多 frame 時多個同類對像不共享 prototype 的問題,從其他 frame 中取得的對象無法正確判斷。

還好,還有一個最簡單也最可靠的方法:Object.prototype.toString。對於不同類型的數據,這個方法可以傳回 '[object Object]'、'[object Array]'、'[object String]' 這樣的字串,非常方便判斷。要注意的是,在 IE8 及其以下瀏覽器中,這個方法對於null、undefined、window 等都會傳回 '[object Object]',不過還好,這並不影響我們用它來判斷空物件。

下面直接上程式碼,說明就看註解吧。




複製程式碼


程式碼如下:

var isEmptyValue = function(value)             var type;            if(value == null) {      return true;            }            type = Object. prototype.toString.call(value).slice(8, -1);            switch(type) {          return !$.trim(value);            case ' Array':               $.isEmptyObject(value); // 普通物件使用for...in 判斷,有key 即為false            default:                return false;      };
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn