有時候我們會遇到這樣的情況:在一些前端控件要提交數據到服務器端的數據驗證過程中,需要判斷提交的數據是否為空。如果是普通表單的字符串數據,只需要在 trim 后判斷 length 即可,而這里需要的數據可以是各種不同的類型(數字、字符串、數組、對象等等),通過 JSON.stringify(data) 進行序列化后再傳遞。
在這里定義如下的數據值為“空值”:
•undefined
•null
•空字符串及純空白字符串:''、' ' 等。
•空數組:[]
•空對象:{}
對于除此以外的數據值,均認為不為空。
其中 null 和 undefined 很容易識別,但對于其他類型,我們須要得到其數據類型才能用相應的方法去檢測數據是否為空。最容易想到的方法就是利用typeof 操作符:
用 instanceof?這只能判斷對象,而且存在多 frame 時多個同類對象不共享 prototype 的問題,從其他 frame 中取得的對象無法正確判斷。
還好,還有一個最簡單也最可靠的方法:Object.prototype.toString。對于不同類型的數據,這個方法可以返回 '[object Object]'、'[object Array]'、'[object String]' 這樣的字符串,非常方便判斷。需要注意的是,在 IE8 及其以下瀏覽器中,這個方法對于null、undefined、window 等都會返回 '[object Object]',不過還好,這并不影響我們使用它判斷空對象。
下面直接上代碼,說明就看注釋吧。
var type;
if(value == null) { // 等同于 value === undefined || value === null
return true;
}
type = Object.prototype.toString.call(value).slice(8, -1);
switch(type) {
case 'String':
return !$.trim(value);
case 'Array':
return !value.length;
case 'Object':
return $.isEmptyObject(value); // 普通對象使用 for...in 判斷,有 key 即為 false
default:
return false; // 其他對象均視作非空
}
};
新聞熱點
疑難解答