JavaScript空判斷
阿新 • • 發佈:2018-12-10
在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>