Js判断参数(String,Array,Object)是否为undefined或者值为空


Posted in Javascript onNovember 04, 2013

有时候我们会遇到这样的情况:在一些前端控件要提交数据到服务器端的数据验证过程中,需要判断提交的数据是否为空。如果是普通表单的字符串数据,只需要在 trim 后判断 length 即可,而这里需要的数据可以是各种不同的类型(数字、字符串、数组、对象等等),通过 JSON.stringify(data) 进行序列化后再传递。

在这里定义如下的数据值为“空值”:

•undefined
•null
•空字符串及纯空白字符串:''、'    ' 等。
•空数组:[]
•空对象:{}

对于除此以外的数据值,均认为不为空。

其中 null 和 undefined 很容易识别,但对于其他类型,我们须要得到其数据类型才能用相应的方法去检测数据是否为空。最容易想到的方法就是利用typeof 操作符:

<SPAN style="BACKGROUND-COLOR: rgb(255,255,255)">if(typeof data === 'number') {
  //deal with numbers
}</SPAN>

但 typeof 返回的类型字符串只有 'object'、'function'、'number'、'boolean'、'string'、'undefined' 这六种,很多原生对象如 Date、RegExp 对象无法与用 {} 创建的对象进行区分。另外,typeof 对于一些基本数据类型如 (String、Number、Boolean) 与其对应的基本包装类型数据会分别返回不同值,如:
<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>

这对我们的判断也有一定的影响。

用 instanceof?这只能判断对象,而且存在多 frame 时多个同类对象不共享 prototype 的问题,从其他 frame 中取得的对象无法正确判断。

还好,还有一个最简单也最可靠的方法:Object.prototype.toString。对于不同类型的数据,这个方法可以返回 '[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 = 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; // 其他对象均视作非空
            }
        };
Javascript 相关文章推荐
javascript的对话框详解与参数
Mar 08 Javascript
dojo 之基础篇(二)之从服务器读取数据
Mar 24 Javascript
jquery each()源代码
Feb 14 Javascript
JS中Date日期函数中的参数使用介绍
Jan 02 Javascript
javascript中的作用域和闭包详解
Jan 13 Javascript
AngularJS 应用身份认证的技巧总结
Nov 07 Javascript
javascript 实现动态侧边栏实例详解
Nov 11 Javascript
AngularJS实现select的ng-options功能示例
Jul 12 Javascript
jquery ajax异步提交表单数据的方法
Oct 27 jQuery
vue 路由页面之间实现用手指进行滑动的方法
Feb 23 Javascript
基于vue打包后字体和图片资源失效问题的解决方法
Mar 06 Javascript
Vue 配合eiement动态路由,权限验证的方法
Sep 26 Javascript
浅析return false的正确使用
Nov 04 #Javascript
javascript与jquery中跳出循环的区别总结
Nov 04 #Javascript
js中apply方法的使用详细解析
Nov 04 #Javascript
js数组操作学习总结
Nov 04 #Javascript
Javascript执行效率全面总结
Nov 04 #Javascript
jquery的map与get方法详解
Nov 04 #Javascript
ajax请求get与post的区别总结
Nov 04 #Javascript
You might like
MVC模式的PHP实现
2006/10/09 PHP
学习使用curl采集curl使用方法
2012/01/11 PHP
关于PHP堆栈与列队的学习
2013/06/21 PHP
php查询mysql大量数据造成内存不足的解决方法
2015/03/04 PHP
thinkPHP简单遍历数组方法分析
2016/05/16 PHP
php生成与读取excel文件
2016/10/14 PHP
Yii框架核心组件类实例详解
2019/08/06 PHP
给Function做的OOP扩展
2009/05/07 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(三)情景对话中仿打字机输出文字
2013/01/23 Javascript
Function.prototype.call.apply结合用法分析示例
2013/07/03 Javascript
javascript实现获取服务器时间
2015/05/19 Javascript
浅谈javascript函数式编程
2015/09/06 Javascript
jQuery插件实现无缝滚动特效
2015/11/24 Javascript
js实现分割上传大文件
2016/03/09 Javascript
AngularJs学习第八篇 过滤器filter创建
2016/06/08 Javascript
基于jQuery实现表格的排序
2016/12/02 Javascript
JS获取短信验证码倒计时的实现代码
2017/05/22 Javascript
bootstrap switch开关组件使用方法详解
2017/08/22 Javascript
vue跨域解决方法
2017/10/15 Javascript
javascript和php使用ajax通信传递JSON的实例
2018/08/21 Javascript
react-native聊天室|RN版聊天App仿微信实例|RN仿微信界面
2019/11/12 Javascript
[02:32]DOTA2英雄基础教程 祸乱之源
2013/12/23 DOTA
python自动格式化json文件的方法
2015/03/11 Python
详解python3实现的web端json通信协议
2016/12/29 Python
详谈Python基础之内置函数和递归
2017/06/21 Python
Python双向循环链表实现方法分析
2018/07/30 Python
使用Pyinstaller转换.py文件为.exe可执行程序过程详解
2019/08/06 Python
使用Python爬虫爬取小红书完完整整的全过程
2021/01/19 Python
铭立家具面试题
2012/12/06 面试题
某/etc/fstab文件中的某行如下: /dev/had5 /mnt/dosdata msdos defaults,usrquota 1 2 请解释其含义
2013/04/11 面试题
五年级数学教学反思
2014/02/11 职场文书
团结演讲稿范文
2014/05/23 职场文书
党的群众路线教育实践活动自我剖析材料
2014/10/08 职场文书
2014年加油站站长工作总结
2014/12/23 职场文书
安全生产会议制度
2015/08/06 职场文书
Android Rxjava3 使用场景详解
2022/04/07 Java/Android