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 相关文章推荐
js+css在交互上的应用
Jul 18 Javascript
在VS2008中使用jQuery智能感应的方法
Dec 30 Javascript
js函数排序的实例代码
Jul 01 Javascript
JQuery判断radio是否选中并获取选中值的示例代码
Oct 17 Javascript
JQuery勾选指定name的复选框集合并显示的方法
May 18 Javascript
学习Angular中作用域需要注意的坑
Aug 17 Javascript
js简单获取表单中单选按钮值的方法
Aug 23 Javascript
再谈javascript常见错误及解决方法
Sep 16 Javascript
BootStrapValidator校验方式
Dec 19 Javascript
Ajax 加载数据 练习代码
Jan 05 Javascript
swiper插件自定义切换箭头按钮
Dec 28 Javascript
详解@Vue/Cli 3 Invalid Host header 错误解决办法
Jan 02 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中的串行化变量和序列化对象
2006/09/05 PHP
fleaphp crud操作之findByField函数的使用方法
2011/04/23 PHP
PHP模拟post提交数据方法汇总
2016/02/16 PHP
PHP+JS三级菜单联动菜单实现方法
2016/02/24 PHP
PHP数组操作实例分析【添加,删除,计算,反转,排序,查找等】
2016/12/24 PHP
实例分析PHP中PHPMailer发邮件
2017/12/13 PHP
PHP按一定比例压缩图片的方法
2018/10/12 PHP
键盘控制事件应用教程大全
2006/11/24 Javascript
javascript 数组的方法集合
2008/06/05 Javascript
COM中获取JavaScript数组大小的代码
2009/11/22 Javascript
jquery.Callbacks的实现详解
2016/11/30 Javascript
jQuery实现QQ空间汉字转拼音功能示例
2017/07/10 jQuery
vue.js模仿京东省市区三级联动的选择组件实例代码
2017/11/22 Javascript
学习Vue组件实例
2018/04/28 Javascript
element-ui 表格数据时间格式化的方法
2018/08/24 Javascript
使用Vue做一个简单的todo应用的三种方式的示例代码
2018/10/20 Javascript
JSON获取属性值方法代码实例
2020/06/30 Javascript
解决Antd Table表头加Icon和气泡提示的坑
2020/11/17 Javascript
JS实现鼠标移动拖尾
2020/12/27 Javascript
[06:04]DOTA2国际邀请赛纪录片:Just For LGD
2013/08/11 DOTA
python实现蒙特卡罗方法教程
2019/01/28 Python
python脚本当作Linux中的服务启动实现方法
2019/06/28 Python
django 基于中间件实现限制ip频繁访问过程详解
2019/07/30 Python
在django中使用apscheduler 执行计划任务的实现方法
2020/02/11 Python
举例详解HTML5中使用JSON格式提交表单
2015/06/16 HTML / CSS
Ref与out有什么不同
2012/11/24 面试题
物流管理专业应届生求职信
2013/11/21 职场文书
超市端午节活动方案
2014/01/23 职场文书
消防应急演练方案
2014/02/12 职场文书
聚美优品的广告词
2014/03/14 职场文书
清正廉洁演讲稿
2014/05/22 职场文书
公司应聘求职信
2014/06/21 职场文书
离婚起诉书怎么写
2015/05/19 职场文书
观后感格式
2015/06/19 职场文书
特种设备安全管理制度
2015/08/06 职场文书
MySql统计函数COUNT的具体使用详解
2022/08/14 MySQL