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和JS实现奇偶行背景颜色自定义效果
Nov 19 Javascript
利用Keydown事件阻止用户输入实现代码
Mar 11 Javascript
EasyUI中datagrid在ie下reload失败解决方案
Mar 09 Javascript
Bootstrap入门书籍之(三)栅格系统
Feb 17 Javascript
AngularJS中的过滤器filter用法完全解析
Apr 22 Javascript
分享19个JavaScript 有用的简写写法
Jul 07 Javascript
最适应的vue.js的form提交涉及多种插件【推荐】
Aug 27 Javascript
vue使用localStorage保存登录信息 适用于移动端、PC端
May 27 Javascript
js实现简单五子棋游戏
May 28 Javascript
详解ES6 扩展运算符的使用与注意事项
Nov 12 Javascript
测量JavaScript函数的性能各种方式对比
Apr 27 Javascript
微信小程序APP的事件绑定以及传递参数时的冒泡和捕获
Apr 19 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通过COM使用ADODB的简单例子
2006/12/31 PHP
使用php验证复选框有效性的示例
2013/11/13 PHP
微信营销平台系统?刮刮乐的开发
2014/06/10 PHP
php数组索引的Key加引号和不加引号的区别
2014/08/19 PHP
PHP中的类型约束介绍
2015/05/11 PHP
php投票系统之增加与删除投票(管理员篇)
2016/07/01 PHP
php+webSoket实现聊天室示例代码(附源码)
2017/02/17 PHP
php事务回滚简单实现方法示例
2017/03/28 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
2018/02/06 PHP
JS弹出层的显示与隐藏示例代码
2013/12/27 Javascript
JavaScript截取、切割字符串的技巧
2016/01/07 Javascript
移动端 一个简单易懂的弹出框
2016/07/06 Javascript
JavaScript版经典游戏之扫雷游戏完整示例【附demo源码下载】
2016/12/12 Javascript
浅谈js中同名函数和同名变量的执行问题
2017/02/12 Javascript
JavaScript原生数组Array常用方法
2017/04/06 Javascript
浅谈使用React.setState需要注意的三点
2017/12/18 Javascript
详解Vue 事件修饰符capture 的使用
2017/12/29 Javascript
解决Vue.js由于延时显示了{{message}}引用界面的问题
2018/08/25 Javascript
Vue.js 中的实用工具方法【推荐】
2019/07/04 Javascript
微信小程序 授权登录详解(附完整源码)
2019/08/23 Javascript
详解vue或uni-app的跨域问题解决方案
2020/02/21 Javascript
用VsCode编辑TypeScript的实现方法
2020/05/07 Javascript
Vue实现简单的留言板
2020/10/23 Javascript
[05:46]DOTA2英雄梦之声_第18期_陈
2014/06/20 DOTA
python实现将文本转换成语音的方法
2015/05/28 Python
git使用.gitignore设置不生效或不起作用问题的解决方法
2017/06/01 Python
python编程线性回归代码示例
2017/12/07 Python
Python cookbook(字符串与文本)在字符串的开头或结尾处进行文本匹配操作
2018/04/20 Python
python与C、C++混编的四种方式(小结)
2019/07/15 Python
使用Python生成200个激活码的实现方法
2019/11/22 Python
OnePlus加拿大官网:中国国际化手机品牌
2020/10/13 全球购物
医药大学生求职简历的自我评价
2013/10/17 职场文书
工商治理实习生的自我评价分享
2014/02/20 职场文书
《秋游》教学反思
2014/04/24 职场文书
二审答辩状格式
2015/05/22 职场文书
windows安装 redis 6.2.6最新步骤详解
2022/04/26 Redis