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 相关文章推荐
jquery动态改变onclick属性导致失效的问题解决方法
Dec 04 Javascript
jquery 实现input输入什么div图层显示什么
Jun 15 Javascript
animate 实现滑动切换效果【实例代码】
May 05 Javascript
Javascript基于jQuery UI实现选中区域拖拽效果
Nov 25 Javascript
基于ionic实现下拉刷新功能
May 10 Javascript
vue.js提交按钮时进行简单的if判断表达式详解
Aug 08 Javascript
JS获取今天是本月第几周、本月共几周、本月有多少天、是今年的第几周、是今年的第几天的示例代码
Dec 05 Javascript
详解vue使用$http服务端收不到参数
Apr 19 Javascript
Vue.js路由实现选项卡简单实例
Jul 24 Javascript
Node.JS枚举统计当前文件夹和子目录下所有代码文件行数
Aug 23 Javascript
微信小程序实现多张图片上传功能
Nov 18 Javascript
Vue深入理解插槽slot的使用
Aug 05 Vue.js
浅析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
php查询mysql大量数据造成内存不足的解决方法
2015/03/04 PHP
wamp服务器访问php非常缓慢的解决过程
2015/07/01 PHP
PHP下 Mongodb 连接远程数据库的实例代码
2017/08/30 PHP
php语法检查的方法总结
2019/01/21 PHP
Swoole扩展的6种模式深入详解
2021/03/04 PHP
用js实现键盘方向键翻页功能的代码
2007/06/03 Javascript
JavaScript中的事件处理
2008/01/16 Javascript
javascript 面向对象 function类
2010/05/13 Javascript
javascript Array对象基础知识小结
2010/11/16 Javascript
利用JS延迟加载百度分享代码,提高网页速度
2013/07/01 Javascript
快速解决jquery之get缓存问题的最简单方法介绍
2013/12/19 Javascript
express的中间件basicAuth详解
2014/12/04 Javascript
js实现延迟加载的方法
2015/06/24 Javascript
JS本地刷新返回上一页代码
2016/07/25 Javascript
JS判断是否在微信浏览器打开的简单实例(推荐)
2016/08/24 Javascript
JS简单获取客户端IP地址的方法【调用搜狐接口】
2016/09/05 Javascript
浅谈JS函数定义方式的区别
2016/10/30 Javascript
jquery中关于bind()方法的使用技巧分享
2017/03/30 jQuery
微信小程序 判断手机号的实现代码
2017/04/19 Javascript
Vue声明式渲染详解
2017/05/17 Javascript
JavaScript实现获取select下拉框中第一个值的方法
2018/02/06 Javascript
详解JS判断页面是在手机端还是在PC端打开的方法
2019/04/26 Javascript
vue data变量相互赋值后被实时同步的解决步骤
2020/08/05 Javascript
python调用cmd命令行制作刷博器
2014/01/13 Python
详解python中list的使用
2019/03/15 Python
Python实现12306火车票抢票系统
2019/07/04 Python
python 实现任务管理清单案例
2020/04/25 Python
Python+unittest+requests 接口自动化测试框架搭建教程
2020/10/09 Python
python中numpy.empty()函数实例讲解
2021/02/05 Python
html5触摸事件判断滑动方向的实现
2018/06/05 HTML / CSS
优秀交警事迹材料
2014/01/26 职场文书
税务干部鉴定材料
2014/02/11 职场文书
经理管理专业毕业自荐书范文
2014/02/12 职场文书
入党思想汇报怎么写
2014/04/03 职场文书
优秀员工演讲稿
2019/06/21 职场文书
Java内存模型之happens-before概念详解
2021/06/13 Java/Android