1. 程式人生 > >JavaScript空判斷

JavaScript空判斷

在JavaScript中,空判斷比較常見,但究竟應該如何正確地使用空判斷呢?不同的資料型別有不同的判斷方法,不能同一而論,在判斷空前,應先確定資料的型別。

1、不同型別具有不同的判空方法

在判空前應預判資料的型別,如果期望型別不清晰,則可能會導致錯誤的判斷或考慮情況不周全。

序號 測試型別 測試程式碼 結果
1 無引數或傳入undefined test1(); 輸入值:undefined,型別:undefined,返回值:false
test1(undefined, 'undefined'); 輸入值:undefined,型別:undefined,返回值:false
2 數字 test1(0, '數字0'); 輸入值:數字0,型別:number,返回值:false
test1(-1, '數字-1'); 輸入值:數字-1,型別:number,返回值:true
test1(NaN, '數字NaN'); 輸入值:數字NaN,型別:number,返回值:false
3 字串 test1('', '字串(無內容)'); 輸入值:字串(無內容),型別:string,返回值:false
test1('0', '字串0'); 輸入值:字串0,型別:string,返回值:true
test1(' ','字串空格'); 輸入值:字串空格,型別:string,返回值:true
4 物件 test1({},'空物件({})'); 輸入值:空物件({}),型別:object,返回值:true
test1([],'空陣列'); 輸入值:空陣列,型別:object,返回值:true
test1(null, 'null'); 輸入值:null,型別:object,返回值:false

 2、常用判空函式:

序號 測試型別 函式 測試程式碼 結果
1 字串判空 /** *字串去除所有空格 */ function trim(a){   if(typeof a =='string'){     return a.replace(/\s+/,'');   }else {     return a;   } } /** *字串判空 */ function isEmpty(a){   var b = trim(a);   if(b){     return false;    }else {       return true;    } } println(isEmpty(' ')); println(isEmpty()); println(isEmpty('')); println(isEmpty(' 1 ')); true true true false
2 數字判空 /** *數字判空,如果不是數字型別,則應首先進行型別轉換 */ function isNull(a){   if((typeof a) == 'number' && a !=NaN){     return false;   }else {     return true;   } } println(isNull()); println(isNull(null)); println(isNull('')); println(isNull(' ')); println(isNull('9')); println(isNull([1])); true true true true true true
3 綜合判空,不考慮為物件的情況 /** * 不分型別,不考慮傳入值為物件的情況 */ function isNullEmpty(a){   if((typeof a) == 'string'){     return isEmpty(a);   } else if((typeof a) == 'number' && a !=NaN){     return false;   }else {     return true;   } } println(isNullEmpty()); println(isNullEmpty(null)); println(isNullEmpty('')); println(isNullEmpty(' ')); println(isNullEmpty('9')); println(isNullEmpty([1])); true true true true false true
4 物件判空 /** *物件判空 */ function isEmptyObj(a){   if((typeof a) == 'object' && a!=null){     return false;   }else {     return true;   } } println(isEmptyObj(null)); println(isEmptyObj()); println(isEmptyObj(undefined)); true true true
5 陣列判空 /** *陣列判空,陣列是物件的一種 */ function isEmptyArray(a){   if((typeof a) == 'object' && a!=null && a.length>0){   return false;   }else {     return true;   } } println(isEmptyArray(null)); println(isEmptyArray([])); println(isEmptyArray([1,'2',{test:'ss'}])); true true false

3、測試程式碼

	<script lang="javascript">
     function println(str){
    		document.writeln(str + '<br>');
    } 
    
	
	
	function test1(a,desc){
		var str = '輸入值:' + desc + ',型別:'+ (typeof a);
	
		if(a){
			println(str + ',返回值:<span style="color:#ff0000;">true</span>');
		}else {
			println(str + ',返回值:<span style="color:#000000;">false</span>');
		} 
	}
	
	/**
	*字串去除所有空格
	*/
	function trim(a){
		if(typeof a =='string'){
			return a.replace(/\s+/,'');
		}else {
			return a;
		} 
	}
	
	
	/**
	*字串判空
	*/
	function isEmpty(a){
		var b = trim(a);
		
		if(b){
			return false;
		}else {
			return true;
		} 
	}
	
	/**
	*數字判空,如果不是數字型別,則應首先進行型別轉換
	*/
	function isNull(a){
 
		if((typeof a) == 'number' && a !=NaN){ 
			return false;
		}else {
			return true;
		} 
	}
	
	
	/**
	*陣列判空,陣列是物件的一種
	*/
	function isEmptyArray(a){
 
		if((typeof a) == 'object' && a!=null && a.length>0){ 
			return false;
		}else {
			return true;
		} 
	}
	
	
	/**
	*物件判空
	*/
	function isEmptyObj(a){
		if((typeof a) == 'object' && a!=null){ 
			return false;
		}else {
			return true;
		} 
	}
	
	
	/**
	* 不分型別,不考慮傳入值為物件的情況
	*/
	function isNullEmpty(a){
 
		if((typeof a) == 'string'){
			return isEmpty(a);
		} else if((typeof a) == 'number' && a !=NaN){
			return false;
		}else {
			return true;
		} 
	}	
	
	
	println('-------- 無引數或傳入undefined--------------');
	test1();
	test1(undefined, 'undefined');
	
	println('------------------數字----------------------');		
	test1(0, '數字0');
	test1(-1, '數字-1');
	test1(NaN, '數字NaN');
	
	println('-------------------字串-------------------');
	test1('', '字串(無內容)');
	test1('0', '字串0');
	test1(' ','字串空格');
	
	println('-------------------物件--------------------');	
	test1({},'空物件({})');
	test1([],'空陣列');
	test1(null, 'null');	
	
	println('-----------------字串判空----------------');	
	println(isEmpty('   '));
	println(isEmpty());
	println(isEmpty(''));
	println(isEmpty('  1   '));

	println('----------------數字判空-------------------');	
	println(isNull());
	println(isNull(null));
	println(isNull(''));
	println(isNull(' '));
	println(isNull('9'));
	println(isNull([1]));	
	
	
	println('----------------物件判空--------------------');	
	println(isEmptyObj(null));
	println(isEmptyObj());
	println(isEmptyObj(undefined));			
	
	
	println('----------------綜合判空,不考慮為物件的情況--------------------');		
	println(isNullEmpty());
	println(isNullEmpty(null));
	println(isNullEmpty(''));
	println(isNullEmpty(' '));
	println(isNullEmpty('9'));
	println(isNullEmpty([1]));		
	
	
	println('----------------陣列判空--------------------');	
	println(isEmptyArray(null));
	println(isEmptyArray([]));
	println(isEmptyArray([1,'2',{test:'ss'}]));


	
	println('----------------陣列元素型別可不統一--------------------');	
	println([1,'2',{test:'ss'}]);
	
	</script>