Js判断参数(String,Array,Object)是否为undefined或者
值为空
有时候我们会遇到这样的情况:在⼀些前端控件要提交数据到服务器端的数据验证过程中,需要判断提交的数据是否为空。如果是普通表单的字符串数据,只需要在 trim 后判断 length 即可,⽽这⾥需要的数据可以是各种不同的类型(数字、字符串、数组、对象等等),通过 JSON.stringify(data) 进⾏序列化后再传递。
在这⾥定义如下的数据值为“空值”:
•undefined
•null
•空字符串及纯空⽩字符串:''、'    ' 等。
•空数组:[]
•空对象:{}
对于除此以外的数据值,均认为不为空。
其中 null 和 undefined 很容易识别,但对于其他类型,我们须要得到其数据类型才能⽤相应的⽅法去检测数据是否为空。最容易想到的⽅法就是利⽤typeof 操作符:
复制代码代码如下:
<SPAN >if(typeof data === 'number') {
//deal with numbers
}</SPAN>
但 typeof 返回的类型字符串只有 'object'、'function'、'number'、'boolean'、'string'、'undefined' 这六种,很多原⽣对象如Date、RegExp 对象⽆法与⽤ {} 创建的对象进⾏区分。另外,typeof 对于⼀些基本数据类型如 (String、Number、Boolean)与其对应的基本包装类型数据会分别返回不同值,如:
复制代码代码如下:
<SPAN >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>
typeof array这对我们的判断也有⼀定的影响。
⽤ instanceof?这只能判断对象,⽽且存在多 frame 时多个同类对象不共享 prototype 的问题,从其他 frame 中取得的对象⽆法正确判断。
还好,还有⼀个最简单也最可靠的⽅法:String。对于不同类型的数据,这个⽅法可以返回 '[object Object]'、'[object Array]'、'[object String]' 这样的字符串,⾮常⽅便判断。需要注意的是,在 IE8 及其以下浏览器中,这个⽅法对于null、undefined、window 等都会返回 '[object Object]',不过还好,这并不影响我们使⽤它判断空对象。
下⾯直接上代码,说明就看注释吧。
复制代码代码如下:
var isEmptyValue = function(value) {
var type;
if(value == null) { // 等同于 value === undefined || value === null
return true;
}
type = String.call(value).slice(8, -1);
switch(type) {
case 'String':
return !$.trim(value);
case 'Array':
return !value.length;
case 'Object':
return $.isEmptyObject(value); // 普通对象使⽤ in 判断,有 key 即为 false            default:
return false; // 其他对象均视作⾮空
}
};

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。