zoukankan      html  css  js  c++  java
  • 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; // 其他对象均视作非空
                }
            };

  • 相关阅读:
    Python笔记_第二篇_面向过程_第二部分_4.常用模块的简单使用_import语句的解释
    Python笔记_第二篇_面向过程_第二部分_4.常用模块的简单使用_系统模块(sys)
    Python笔记_第二篇_面向过程_第二部分_4.常用模块的简单使用_time模块、datetime模块和calendar模块
    Python笔记_第二篇_面向过程_第二部分_4.常用模块的简单使用_语音合成模块(win32con)和语音控制模块(win32con)
    Python笔记_第二篇_面向过程_第二部分_4.常用模块的简单使用_窗体控制模块(win32con、win32gui)
    Python笔记_第二篇_面向过程_第二部分_4.常用模块的简单使用_操作系统模块(os)和队列模块(collections)
    python抓取百度百科点赞数等动态数据
    python 最长公共子序列
    中文unicode范围及unicode编解码
    python爬取并计算成绩
  • 原文地址:https://www.cnblogs.com/airen123/p/9625742.html
Copyright © 2011-2022 走看看