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下利用jsonp跨域访问实现方法
Jul 29 Javascript
Javascript算符的优先级介绍
Mar 20 Javascript
div浮层,滚动条移动,位置保持不变的4种方法汇总
Dec 11 Javascript
在Ubuntu系统上安装Ghost博客平台的教程
Jun 17 Javascript
JavaScript中的Repaint和Reflow用法详解
Jul 27 Javascript
将form表单通过ajax实现无刷新提交的简单实例
Oct 12 Javascript
详解jquery easyui之datagrid使用参考
Dec 05 Javascript
jquery 仿锚点跳转到页面指定位置的实例
Feb 14 Javascript
微信小程序动态显示项目倒计时效果
Jun 13 Javascript
jQuery使用zTree插件实现可拖拽的树示例
Sep 23 jQuery
详解js的作用域、预解析机制
Feb 05 Javascript
vue+axios 前端实现登录拦截的两种方式(路由拦截、http拦截)
Oct 24 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
在Mac OS上搭建PHP的Yii框架及相关测试环境
2016/02/14 PHP
Thinkphp连表查询及数据导出方法示例
2016/10/15 PHP
PHP策略模式定义与用法示例
2017/07/27 PHP
javascript与asp.net(c#)互相调用方法
2009/12/13 Javascript
让ie运行js时提示允许阻止内容运行的解决方法
2010/10/24 Javascript
IE6/7/8/9不支持exec的简写方式
2011/05/25 Javascript
判断js对象是否拥有某一个属性的js代码
2013/08/16 Javascript
js去除输入框中所有的空格和禁止输入空格的方法
2014/06/09 Javascript
javascript实现时间格式输出FormatDate函数
2015/01/13 Javascript
浅谈JavaScript数据类型
2015/03/03 Javascript
JS实现留言板功能[楼层效果展示]
2017/12/27 Javascript
JSON生成Form表单的方法示例
2018/11/21 Javascript
关于Vue Router中路由守卫的应用及在全局导航守卫中检查元字段的方法
2018/12/09 Javascript
微信小程序webview 脚手架使用详解
2019/07/22 Javascript
webpack的 rquire.context用法实现工程自动化的方法
2020/02/07 Javascript
Vue 列表页带参数进详情页的操作(router-link)
2020/11/13 Javascript
[31:55]完美世界DOTA2联赛循环赛 IO vs GXR BO2第一场 11.04
2020/11/05 DOTA
Python的Django框架下管理站点的基本方法
2015/07/17 Python
离线安装Pyecharts的步骤以及依赖包流程
2020/04/23 Python
Python实现的计算器功能示例
2018/04/26 Python
解决Python一行输出不显示的问题
2018/12/03 Python
对Python中小整数对象池和大整数对象池的使用详解
2019/07/09 Python
利用python list完成最简单的DB连接池方法
2019/08/09 Python
Python使用matplotlib 画矩形的三种方式分析
2019/10/31 Python
Python之qq自动发消息的示例代码
2021/02/18 Python
英国家电购物网站:Sonic Direct
2019/03/26 全球购物
Kiwi.com中国:找到特价机票并发现新目的地
2019/10/27 全球购物
文案策划专业自荐信
2014/07/07 职场文书
公证委托书格式
2014/09/13 职场文书
党的群众路线教育实践活动学习计划
2014/11/03 职场文书
单位租房协议范本
2014/12/03 职场文书
销售会议开幕词
2015/01/28 职场文书
民事起诉状范文
2015/05/19 职场文书
上诉状格式
2015/05/23 职场文书
安全生产会议制度
2015/08/06 职场文书
从零开始在Centos7上部署SpringBoot项目
2022/04/07 Servers