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 相关文章推荐
JSON传递bool类型数据的处理方式介绍
Sep 18 Javascript
JS记录用户登录次数实现代码
Jan 15 Javascript
javascript实现复选框选中属性
Mar 25 Javascript
分享12个非常实用的JavaScript小技巧
May 11 Javascript
BootStrap轻松实现微信页面开发代码分享
Oct 21 Javascript
使用UrlConnection实现后台模拟http请求的简单实例
Jan 04 Javascript
vue.js指令和组件详细介绍及实例
Apr 06 Javascript
canvas实现弧形可拖动进度条效果
May 11 Javascript
实例教学如何写vue插件
Nov 30 Javascript
vue.js 实现评价五角星组件的实例代码
Aug 13 Javascript
详解微信小程序中组件通讯
Oct 30 Javascript
在vue中通过render函数给子组件设置ref操作
Nov 17 Vue.js
浅析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 socket方式提交的post详解
2008/07/19 PHP
学习php笔记 字符串处理
2010/10/19 PHP
PHP企业级应用之常见缓存技术篇
2011/01/27 PHP
php构造函数实例讲解
2013/11/13 PHP
PHP静态成员变量
2017/02/14 PHP
PHP迭代与递归实现无限级分类
2017/08/28 PHP
由document.body和document.documentElement想到的
2009/04/13 Javascript
javascript 文本框水印/占位符(watermark/placeholder)实现方法
2012/01/15 Javascript
Javascript中拼接大量字符串的方法
2015/02/05 Javascript
简介JavaScript中用于处理正切的Math.tan()方法
2015/06/15 Javascript
JS实现弹出浮动窗口(支持鼠标拖动和关闭)实例详解
2015/08/06 Javascript
JS实现超精简的链接列表在固定区域内滚动效果代码
2015/11/04 Javascript
JS实现保留n位小数的四舍五入问题示例
2016/08/03 Javascript
js本地图片预览实现代码
2016/10/09 Javascript
简单实现Vue的observer和watcher
2016/12/21 Javascript
bootstrap组件之按钮式下拉菜单小结
2017/01/19 Javascript
AngularJS 验证码60秒倒计时功能的实现
2017/06/05 Javascript
Web安全之XSS攻击与防御小结
2018/12/13 Javascript
每周一练 之 数据结构与算法(Stack)
2019/04/16 Javascript
python使用any判断一个对象是否为空的方法
2014/11/19 Python
Python将文本去空格并保存到txt文件中的实例
2018/07/24 Python
selenium+python自动化测试环境搭建步骤
2019/06/03 Python
python实现PID算法及测试的例子
2019/08/08 Python
python groupby 函数 as_index详解
2019/12/16 Python
Python hashlib加密模块常用方法解析
2019/12/18 Python
详解Selenium-webdriver绕开反爬虫机制的4种方法
2020/10/28 Python
Python Django路径配置实现过程解析
2020/11/05 Python
GAP欧盟网上商店:GAP EU
2016/09/13 全球购物
全球最受追捧的运动服品牌领先数字目的地:Stylerunner
2020/11/25 全球购物
校园达人秀策划书
2014/01/12 职场文书
村级环境卫生整治方案
2014/05/04 职场文书
温馨提示标语
2014/06/26 职场文书
2016年党员干部廉政承诺书
2016/03/24 职场文书
Html5生成验证码的示例代码
2021/05/10 Javascript
javascript代码简写的几种常用方式汇总
2021/08/23 Javascript
JAVA API 实用类 String详解
2021/10/05 Java/Android