JavaScript空字符串判断

JavaScript空字符串判断

本文完整示例代码GIT仓:javascript

比较常见写法

if (str == 'undefined' || !str || !/[^\s]/.test(str)) {
        //为空
    } else {
        //不为空
    }

这种写法缺点

  • 代码比较长,难于记住
  • 须要复制的时候要找代码,费时间

解决方案

  • 对于这种经常使用的代码段,咱们项目上常常会把他封装成一个通用函数,放到项目工具库中,而后须要使用的时候直接调用
  • 使用第三方工具库,好比jPublic.js,GIT仓:https://github.com/smltq/jPublic

收到的反馈总结

有人可能以为,判断一个字符串为空,直接写成这样:java

a.git

if (str) {
        //为空
    } else {
        //不为空
    }

在实际生产环境中并无什么问题,何须要如上写一段这么长的代码来判断。(PS:一些特殊数据下,真的就显示正常吗?针对这种状况,我下面会写出测试用例来判断运行结果)github

其它判断空代码

网络上还有不少各类状况的空字符串判断,以下:网络

b.函数

if (variable1 !== null || variable1 !== undefined || variable1 !== '') { 
    var variable2 = variable1; 
  }

c.工具

function isEmpty(property) {
      return (property === null || property === "" || typeof property === "undefined");
   }

d.单元测试

function isEmpty(strIn) {
    if (strIn === undefined) {
        return true;
    } else if (strIn == null) {
        return true;
    } else if (strIn == "") {
        return true;
    } else {
        return false;
    }
}

e.测试

String.isEmpty = function (value) {
    return (!value || value == undefined || value == "" || value.length == 0);
}

等各类空字符串判断方法,这些代码多少都有些脓肿和判断不全的,了解js if(xx)自动转换的朋友都知道,任何一个值,只要它不是 undefined、null、 0、NaN或空字符串(""),那么不管是任何对象,即便是值为假的Boolean对象,在条件语句中都为真。
因此以上代码,像好比:null==str、""==str等,其实均可以直接使用if(xx)简化。code

如下是我写的测试用例代码

QUnit.test('字符串空判断:empty', function (assert) {
        function empty(str) {
            if (str == 'undefined' || !str || !/[^\s]/.test(str)) {
                return true;
            } else {
                return false;
            }
        }

        var student = {className: "测试班", name: "我是张三", age: 18};
        assert.ok(empty("   "), "empty空字符串判断正确");
        assert.ok(empty(' '), "empty空字符串判断正确");
        assert.ok(empty(student.skill), "empty空字符串判断正确");
        assert.ok(empty(undefined), "empty空字符串判断正确");
        assert.ok(empty(null), "empty空字符串判断正确");
        assert.ok(empty(""), "empty空字符串判断正确");
        assert.ok(empty(''), "empty空字符串判断正确");
    });

    QUnit.test('字符串空判断:empty1', function (assert) {
        function empty1(str) {
            if (str) {
                return true;
            }
            return false;
        }

        var student = {className: "测试班", name: "我是张三", age: 18};
        assert.ok(empty1("   "), "empty1空字符串判断正确");
        assert.ok(empty1(' '), "empty1空字符串判断正确");
        assert.ok(empty1(student.skill), "empty1空字符串判断正确");
        assert.ok(empty1(undefined), "empty1空字符串判断正确");
        assert.ok(empty1(null), "empty1空字符串判断正确");
        assert.ok(empty1(""), "empty1空字符串判断正确");
        assert.ok(empty1(''), "empty1空字符串判断正确");
    });

    QUnit.test('字符串空判断:isNullOrEmpty', function (assert) {
        var student = {className: "测试班", name: "我是张三", age: 18};
        assert.ok(_.isNullOrEmpty("   "), "isNullOrEmpty 空字符串判断正确");
        assert.ok(_.isNullOrEmpty(' '), "isNullOrEmpty 空字符串判断正确");
        assert.ok(_.isNullOrEmpty(student.skill), "isNullOrEmpty 空字符串判断正确");
        assert.ok(_.isNullOrEmpty(undefined), "isNullOrEmpty 空字符串判断正确");
        assert.ok(_.isNullOrEmpty(null), "isNullOrEmpty 空字符串判断正确");
        assert.ok(_.isNullOrEmpty(""), "isNullOrEmpty 空字符串判断正确");
        assert.ok(_.isNullOrEmpty(''), "isNullOrEmpty 空字符串判断正确");
    });

单元测试运行结果

String: 字符串空判断:empty (7)Rerun2 ms ============>>>表示7个用例都经过测试
String: 字符串空判断:empty1 (5, 2, 7)Rerun2 ms ============>>>表示7个用例有5个测试未经过
String: 字符串空判断:isNullOrEmpty (7)Rerun ============>>>表示7个用例都经过测试

运行效果图

运行效果

相关文章
相关标签/搜索