本文完整示例代碼GIT倉:javascript
if (str == 'undefined' || !str || !/[^\s]/.test(str)) { //爲空 } else { //不爲空 }
有人可能以爲,判斷一個字符串爲空,直接寫成這樣: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個用例都經過測試