JavaScript空字符串判斷


JavaScript空字符串判斷

本文完整示例代碼GIT倉:

比較常見寫法

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

這種寫法缺點

  • 代碼比較長,難於記住
  • 需要復制的時候要找代碼,費時間

解決方案

  • 對於這種常用的代碼段,我們項目上經常會把他封裝成一個通用函數,放到項目工具庫中,然后需要使用的時候直接調用
  • 使用第三方工具庫,比如jPublic.js,GIT倉:https://github.com/smltq/jPublic

收到的反饋總結

有人可能覺得,判斷一個字符串為空,直接寫成這樣:

a.

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

在實際生產環境中並沒有什么問題,何必要如上寫一段這么長的代碼來判斷。(PS:一些特殊數據下,真的就顯示正常嗎?針對這種情況,我下面會寫出測試用例來判斷運行結果)

其它判斷空代碼

網絡上還有很多各種情況的空字符串判斷,如下:

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對象,在條件語句中都為真。
所以以上代碼,像比如:nullstr、""str等,其實都可以直接使用if(xx)簡化。

以下是我寫的測試用例代碼

    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個用例都通過測試

運行效果圖

運行效果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM