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 浮动广告实现代码
Dec 25 Javascript
JavaScript判断用户名和密码不能为空的实现代码
May 16 Javascript
JS Attribute属性操作详解
May 19 Javascript
详解使用Vue.Js结合Jquery Ajax加载数据的两种方式
Jan 10 Javascript
AngularJs 常用的过滤器
May 15 Javascript
angularjs定时任务的设置与清除示例
Jun 02 Javascript
详解puppeteer使用代理
Dec 27 Javascript
JavaScript函数定义方法实例详解
Mar 05 Javascript
小程序登录之支付宝授权的实现示例
Dec 13 Javascript
Javascript异步执行不按顺序解决方案
Apr 30 Javascript
详解JavaScript 的执行机制
Sep 18 Javascript
Vue3不支持Filters过滤器的问题
Sep 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
特详细的PHPMYADMIN简明安装教程
2008/08/01 PHP
PHP中函数rand和mt_rand的区别比较
2012/12/26 PHP
thinkphp3.2中Lite文件替换框架入口文件或应用入口文件的方法
2015/05/21 PHP
PHP+MySQL实现模糊查询员工信息功能示例
2018/06/01 PHP
jquery使用ColorBox弹出图片组浏览层实例演示
2013/03/14 Javascript
jquery parent和parents的区别分析
2013/10/02 Javascript
使用js判断数组中是否包含某一元素(类似于php中的in_array())
2013/12/12 Javascript
javaScript如何生成xmlhttp
2013/12/16 Javascript
JQuery EasyUI 数字格式化处理示例
2014/05/05 Javascript
JavaScript中的闭包
2016/02/24 Javascript
基于JS实现移动端访问PC端页面时跳转到对应的移动端网页
2020/12/24 Javascript
Vue2.0表单校验组件vee-validate的使用详解
2017/05/02 Javascript
Node.js 异步异常的处理与domain模块解析
2017/05/10 Javascript
微信小程序之蓝牙的链接
2017/09/26 Javascript
在vscode中统一vue编码风格的方法
2018/02/22 Javascript
简单学习5种处理Vue.js异常的方法
2019/06/17 Javascript
vue动态子组件的两种实现方式
2019/09/01 Javascript
vue中如何实现后台管理系统的权限控制的方法步骤
2019/09/05 Javascript
Javascript摸拟自由落体与上抛运动原理与实现方法详解
2020/04/08 Javascript
浅谈Python的文件类型
2016/05/30 Python
Python中@property的理解和使用示例
2019/06/11 Python
pyqt5实现绘制ui,列表窗口,滚动窗口显示图片的方法
2019/06/20 Python
Python3 翻转二叉树的实现
2019/09/30 Python
使用tensorflow显示pb模型的所有网络结点方式
2020/01/23 Python
马来西亚网上美容店:Hermo.my
2017/11/25 全球购物
Vans荷兰官方网站:美国南加州的原创极限运动潮牌
2018/01/23 全球购物
戴森台湾线上商城:Dyson Taiwan
2018/05/21 全球购物
计算机应届毕业生自荐信范文
2014/02/23 职场文书
高中生职业规划范文
2014/03/09 职场文书
篮球比赛策划方案
2014/06/05 职场文书
物理分数没达标检讨书
2014/09/13 职场文书
庆七一宣传标语
2014/10/08 职场文书
个人作风建设心得体会
2014/10/22 职场文书
如何解决.cuda()加载用时很长的问题
2021/05/24 Python
HTML+CSS实现导航条下拉菜单的示例代码
2021/08/02 HTML / CSS
Python函数对象与闭包函数
2022/04/13 Python