当前位置: 首页 > news >正文

Js判断参数(String,Array,Object)是否为undefined或者值为空

在一些前端控件要提交数据到服务器端的数据验证过程中,需要判断提交的数据是否为空。如果是普通表单的字符串数据,只需要在 trim 后判断 length 即可,而这里需要的数据可以是各种不同的类型,通过 JSON.stringify(data) 进行序列化后再传递
 

有时候我们会遇到这样的情况:在一些前端控件要提交数据到服务器端的数据验证过程中,需要判断提交的数据是否为空。如果是普通表单的字符串数据,只需要在 trim 后判断 length 即可,而这里需要的数据可以是各种不同的类型(数字、字符串、数组、对象等等),通过 JSON.stringify(data) 进行序列化后再传递。

在这里定义如下的数据值为“空值”:

•undefined
•null
•空字符串及纯空白字符串:''、'    ' 等。
•空数组:[]
•空对象:{}

对于除此以外的数据值,均认为不为空。

其中 null 和 undefined 很容易识别,但对于其他类型,我们须要得到其数据类型才能用相应的方法去检测数据是否为空。最容易想到的方法就是利用typeof 操作符:

复制代码代码如下:

<SPAN >if(typeof data === 'number') {
  //deal with numbers
}</SPAN>

但 typeof 返回的类型字符串只有 'object'、'function'、'number'、'boolean'、'string'、'undefined' 这六种,很多原生对象如 Date、RegExp 对象无法与用 {} 创建的对象进行区分。另外,typeof 对于一些基本数据类型如 (String、Number、Boolean) 与其对应的基本包装类型数据会分别返回不同值,如: 
复制代码代码如下:

<SPAN >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; // 其他对象均视作非空
            }
        };

转载于:https://www.cnblogs.com/airen123/p/9625742.html

相关文章:

  • 图片合成
  • 对象 get和set方法
  • spsss基本统计分析操作攻略
  • liunx环境下mongodb3.2升级至3.6
  • Keil MDK下如何设置非零初始化变量(复位后变量值不丢失)
  • web服务器下出现大量TIME_WAIT
  • 正则 常见2
  • js限制文本框只能输入数字方法小结
  • VC++文件操作之最全篇
  • SDN控制器列表
  • jdbc学习
  • [HNOI2006]鬼谷子的钱袋
  • ES6装饰器Decorator基本用法
  • 章节六、3-读取Properties属性文件
  • Qt读写ini文件
  • 【RocksDB】TransactionDB源码分析
  • 【译】理解JavaScript:new 关键字
  • JAVA SE 6 GC调优笔记
  • java多线程
  • leetcode讲解--894. All Possible Full Binary Trees
  • node入门
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • windows下使用nginx调试简介
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 聊聊flink的BlobWriter
  • 算法-图和图算法
  • 怎么将电脑中的声音录制成WAV格式
  • 第二十章:异步和文件I/O.(二十三)
  • #pragma once
  • (1)(1.11) SiK Radio v2(一)
  • (31)对象的克隆
  • (AngularJS)Angular 控制器之间通信初探
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (五)网络优化与超参数选择--九五小庞
  • (一)SpringBoot3---尚硅谷总结
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (转)关于pipe()的详细解析
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .equals()到底是什么意思?
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .net下简单快捷的数值高低位切换
  • .net专家(高海东的专栏)
  • @Autowired注解的实现原理
  • @RequestParam @RequestBody @PathVariable 等参数绑定注解详解
  • []利用定点式具实现:文件读取,完成不同进制之间的
  • [2008][note]腔内级联拉曼发射的,二极管泵浦多频调Q laser——
  • [AIGC] 开源流程引擎哪个好,如何选型?
  • [bug总结]: Feign调用GET请求找不到请求体实体类
  • [BZOJ]4817: [Sdoi2017]树点涂色
  • [Deepin 15] 编译安装 MySQL-5.6.35
  • [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated c
  • [hdu1561] The more, The Better 【树形DP】