Js判斷參數(shù)(String,Array,Object)是否為undefined或者值為空
有時(shí)候我們會(huì)遇到這樣的情況:在一些前端控件要提交數(shù)據(jù)到服務(wù)器端的數(shù)據(jù)驗(yàn)證過程中,需要判斷提交的數(shù)據(jù)是否為空。如果是普通表單的字符串?dāng)?shù)據(jù),只需要在 trim 后判斷 length 即可,而這里需要的數(shù)據(jù)可以是各種不同的類型(數(shù)字、字符串、數(shù)組、對(duì)象等等),通過 JSON.stringify(data) 進(jìn)行序列化后再傳遞。
在這里定義如下的數(shù)據(jù)值為“空值”:
•undefined
•null
•空字符串及純空白字符串:''、' ' 等。
•空數(shù)組:[]
•空對(duì)象:{}
對(duì)于除此以外的數(shù)據(jù)值,均認(rèn)為不為空。
其中 null 和 undefined 很容易識(shí)別,但對(duì)于其他類型,我們須要得到其數(shù)據(jù)類型才能用相應(yīng)的方法去檢測(cè)數(shù)據(jù)是否為空。最容易想到的方法就是利用typeof 操作符:
<SPAN style="BACKGROUND-COLOR: rgb(255,255,255)">if(typeof data === 'number') {
//deal with numbers
}</SPAN>
但 typeof 返回的類型字符串只有 'object'、'function'、'number'、'boolean'、'string'、'undefined' 這六種,很多原生對(duì)象如 Date、RegExp 對(duì)象無法與用 {} 創(chuàng)建的對(duì)象進(jìn)行區(qū)分。另外,typeof 對(duì)于一些基本數(shù)據(jù)類型如 (String、Number、Boolean) 與其對(duì)應(yīng)的基本包裝類型數(shù)據(jù)會(huì)分別返回不同值,如:
<SPAN style="BACKGROUND-COLOR: rgb(255,255,255)">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'</SPAN>
這對(duì)我們的判斷也有一定的影響。
用 instanceof?這只能判斷對(duì)象,而且存在多 frame 時(shí)多個(gè)同類對(duì)象不共享 prototype 的問題,從其他 frame 中取得的對(duì)象無法正確判斷。
還好,還有一個(gè)最簡(jiǎn)單也最可靠的方法:Object.prototype.toString。對(duì)于不同類型的數(shù)據(jù),這個(gè)方法可以返回 '[object Object]'、'[object Array]'、'[object String]' 這樣的字符串,非常方便判斷。需要注意的是,在 IE8 及其以下瀏覽器中,這個(gè)方法對(duì)于null、undefined、window 等都會(huì)返回 '[object Object]',不過還好,這并不影響我們使用它判斷空對(duì)象。
下面直接上代碼,說明就看注釋吧。
var isEmptyValue = function(value) {
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); // 普通對(duì)象使用 for...in 判斷,有 key 即為 false
default:
return false; // 其他對(duì)象均視作非空
}
};
- JS array 數(shù)組詳解
- JS Array.slice 截取數(shù)組的實(shí)現(xiàn)方法
- js刪除Array數(shù)組中指定元素的兩種方法
- JavaScript判斷變量是否為數(shù)組的方法(Array)
- JS中數(shù)組Array的用法示例介紹
- 以JSON形式將JS中Array對(duì)象數(shù)組傳至后臺(tái)的方法
- js中數(shù)組Array的一些常用方法總結(jié)
- JavaScript中的ArrayBuffer詳細(xì)介紹
- JavaScript中循環(huán)遍歷Array與Map的方法小結(jié)
- 實(shí)例分析Array.from(arr)與[...arr]到底有何不同
相關(guān)文章
鼠標(biāo)經(jīng)過tr時(shí),改變tr當(dāng)前背景顏色
本篇文章主要介紹了鼠標(biāo)經(jīng)過tr時(shí),改變tr當(dāng)前背景顏色的示例代碼,需要的朋友可以過來參考下,希望對(duì)大家有所幫助2014-01-01JavaScript-RegExp對(duì)象只能使用一次問題解決方法
RegExp對(duì)象執(zhí)行了一次后就廢掉了,所以每次用RegExp都需要重新new一個(gè),下面有個(gè)示例,需要的朋友可以參考下2014-06-06原生JavaScript實(shí)現(xiàn)todolist功能
本篇文章給大家介紹了通過原生JavaScript實(shí)現(xiàn)todolist功能相關(guān)知識(shí)點(diǎn),對(duì)此有需要的朋友可以學(xué)習(xí)下。2018-03-03淺談bootstrap源碼分析之tab(選項(xiàng)卡)
下面小編就為大家?guī)硪黄獪\談bootstrap源碼分析之tab(選項(xiàng)卡)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-06-06JS實(shí)現(xiàn)可縮放、拖動(dòng)、關(guān)閉和最小化的浮動(dòng)窗口完整實(shí)例
這篇文章主要介紹了JS實(shí)現(xiàn)可縮放、拖動(dòng)、關(guān)閉和最小化的浮動(dòng)窗口的方法,實(shí)例分析了javascript操作窗口層的技巧,需要的朋友可以參考下2015-03-03讓你的網(wǎng)站可編輯的實(shí)現(xiàn)js代碼
可以讓你編輯瀏覽器中看到網(wǎng)頁可編輯的實(shí)現(xiàn)代碼。2009-10-10javascript中Date()函數(shù)在各瀏覽器中的顯示效果
本文給大家分享的是javascript中Date()函數(shù)在各瀏覽器中的顯示效果,由于各大瀏覽器的兼容性問題,本文做了這個(gè)測(cè)試,希望有需要的小伙伴可以少走些彎路2015-06-06