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 相关文章推荐
新手入门常用代码集锦
Jan 11 Javascript
GRID拖拽行的实例代码
Jul 18 Javascript
初识SmartJS - AOP三剑客
Jun 08 Javascript
extjs 如何给column 加上提示
Jul 29 Javascript
js用Date对象的setDate()函数对日期进行加减操作
Sep 18 Javascript
深入探讨JavaScript String对象
Mar 09 Javascript
JS使用eval解析JSON的注意事项分析
Nov 14 Javascript
js严格模式总结(分享)
Aug 22 Javascript
谈谈对JavaScript原生拖放的深入理解
Sep 20 Javascript
扩展Bootstrap Tooltip插件使其可交互的方法
Nov 07 Javascript
详解Jquery EasyUI tree 的异步加载(遍历指定文件夹,根据文件夹内的文件生成tree)
Feb 11 Javascript
原生js实现仿window10系统日历效果的实例
Oct 31 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
初步介绍PHP扩展开发经验分享
2012/09/06 PHP
PHP 获取远程文件大小的3种解决方法
2013/07/11 PHP
测试PHP连接MYSQL成功与否的代码
2013/08/16 PHP
ThinkPHP中I(),U(),$this-&gt;post()等函数用法
2014/11/22 PHP
laravel 5 实现模板主题功能(续)
2015/03/02 PHP
php循环table实现一行两列显示的方法
2015/06/04 PHP
详解no input file specified 三种解决方法
2019/11/29 PHP
js实现的仿新浪微博完美的时间组件升级版
2011/12/20 Javascript
JavaScript获取浏览器信息的方法
2015/11/20 Javascript
全面解析Bootstrap中nav、collapse的使用方法
2016/05/22 Javascript
jquery层级选择器(匹配父元素下的子元素实现代码)
2016/09/05 Javascript
JavaScript实现弹出广告功能
2017/03/30 Javascript
利用JQuery操作iframe父页面、子页面的元素和方法汇总
2017/09/10 jQuery
vue中v-for通过动态绑定class实现触发效果
2018/12/06 Javascript
layui 实现表格某一列显示图标
2019/09/19 Javascript
在vue中使用Echarts利用watch做动态数据渲染操作
2020/07/20 Javascript
Python实现将n个点均匀地分布在球面上的方法
2015/03/12 Python
python实现颜色空间转换程序(Tkinter)
2015/12/31 Python
python发送邮件功能实现代码
2016/07/15 Python
python实现基于SVM手写数字识别功能
2020/05/27 Python
pycharm: 恢复(reset) 误删文件的方法
2018/10/22 Python
树莓派使用USB摄像头和motion实现监控
2019/06/22 Python
Flask和pyecharts实现动态数据可视化
2020/02/26 Python
Python脚本导出为exe程序的方法
2020/03/25 Python
Python3爬虫中Ajax的用法
2020/07/10 Python
python能做哪些生活有趣的事情
2020/09/09 Python
HTML5拖放功能_动力节点Java学院整理
2017/07/13 HTML / CSS
你对IPv6了解程度
2016/02/09 面试题
机修工工作职责
2014/02/21 职场文书
淘宝客服专员岗位职责
2014/04/11 职场文书
董事长助理工作职责
2014/06/08 职场文书
三人合伙协议书范本
2014/10/29 职场文书
介绍信模板
2015/01/31 职场文书
销售经理岗位职责
2015/01/31 职场文书
在校学生证明格式
2015/06/24 职场文书
2019财务管理制度最新范本!
2019/07/09 职场文书