問:如何判斷一個字符串str是empty?
答:1)str===“”(不能篩選出空格符及制表符)
2)str.length===0(不能篩選出空格符及制表符), .str.trim().length===0(可以篩選出空格符及制表符)
3) !str(不能篩選出空格符及制表符,0和false)
綜上所述,如果要判斷是空字符串,包括空格符及制表符,要用上str===""||str.trim().length===0,如果要加上空值判斷,就是前一篇的null,undefined的判斷,str===""||str.trim().length===0||str==null
下面看具體解釋:
1.先舉個例子
var addr = ""; var billAddr = " ";//制表符 var homeAddr = " ";//空格符 var numberZero = 0; var boolFalse = false; console.log("addr: " + addr);//返回空 console.log("billAddr: " + billAddr);//返回空 console.log("homeAddr: " + homeAddr);//返回空 console.log("numberZero: " + numberZero);//返回0 console.log("boolFalse: " + boolFalse);//返回false console.log("addr: " + typeof addr);//返回string console.log("billAddr: " + typeof billAddr);//返回string console.log("homeAddr: " + typeof homeAddr);//返回string console.log("numberZero: " + typeof numberZero);//返回number console.log("boolFalse: " + typeof boolFalse);//返回boolean console.log("空string值是null值嗎?用==判斷,答案為:" + ("" == null)); console.log("空string值是null值嗎?用===判斷,答案為:" + ("" === null)); console.log("空string值是undefined值嗎?用==判斷,答案為:" + ("" == undefined)); console.log("空string值是undefined值嗎?用===判斷,答案為:" + ("" === undefined)); console.log("空string值是0值嗎?用==判斷,答案為:" + ("" == 0)); console.log("空string值是0值嗎?用===判斷,答案為:" + ("" === 0)); console.log("空string值是false值嗎?用==判斷,答案為:" + ("" == false)); console.log("空string值是false值嗎?用===判斷,答案為:" + ("" === false));
運行結果如下:
由上面的測試結果,我們發現如果用==來判斷,當變量為0或false,判斷結果也是為真
所以,一定要用===來判斷,不要用==來判斷
方法一,采用===來判斷,但這邊好像有個問題,空格符跟制表符顯示的是不為空?
//寫法一,單純用===來判斷(為啥addr為真,billAddr制表符和homeAddr空格符這兩個為假呢?) console.log("寫法一,單純用===來判斷"); if (addr === "") { console.log("addr無值,為empty"); } else { console.log("addr有值,不為empty,為" + addr); } if (billAddr === "") { console.log("billAddr無值,為empty"); } else { console.log("billAddr有值,不為empty,為" + billAddr) } if (homeAddr === "") { console.log("homeAddr無值,為empty"); } else { console.log("homeAddr有值,不為empty,為" + homeAddr); } if (numberZero === "") { console.log("numberZero無值,為empty"); } else { console.log("numberZero有值,不為empty,為" + numberZero) } if (boolFalse === "") { console.log("boolFalse無值,為empty"); } else { console.log("boolFalse有值,不為empty,為" + boolFalse); }
測試結果如下:
方法二,用.length來判斷
//寫法二,單純用.length來判斷(注意addr,billAddr,homeAddr的長度都不一樣) console.log("寫法二,單純用.length來判斷"); if (addr.length === 0) { console.log("addr沒值,長度為" + addr.length); } else { console.log("addr有值,長度為" + addr.length); } if (billAddr.length === 0) { console.log("billAddr沒值,長度為0"); } else { console.log("billAddr有值,制表符長度為" + billAddr.length) } if (homeAddr.length === 0) { console.log("homeAddr沒值,長度為0"); } else { console.log("homeAddr有值,空格長度為" + homeAddr.length); } if (numberZero.length === 0) { console.log("numberZero沒值,長度為0"); } else { console.log("numberZero有值,制表符長度為" + numberZero.length) } if (boolFalse.length === 0) { console.log("boolFalse沒值,長度為0"); } else { console.log("boolFalse有值,空格長度為" + boolFalse.length); }
測試結果如下:
針對上面的,可以用.trim()來解決,如下:
//寫法三,用.trim().length來判斷(符合預期,trim后長度都為0) console.log("寫法三,用.trim().length來判斷"); if (addr.trim().length > 0) { console.log("addr有值,不為empty"); } else { console.log("trim后長度為:" + addr.trim().length); console.log("addr沒值,empty"); } if (billAddr.trim().length > 0) { console.log("billAddr有值,不為empty"); } else { console.log("trim后長度為:" + billAddr.trim().length); console.log("billAddr沒值,empty") } if (homeAddr.trim().length > 0) { console.log("homeAddr有值,不為empty"); } else { console.log("trim后長度為:" + homeAddr.trim().length); console.log("homeAddr沒值,empty"); }
測試結果如下:
方法四,把變量轉化為boolean值進行判斷?(注意billAddr和homeAddr也顯示為有值)
//寫法四,用!來判斷(問:這種來判斷string很奇怪吧?結果也是!addr為真,!billAddr和!homeAddr為假) //答:這種判斷不奇怪,假設addr為變量,如果變量addr的值是null,undefined,0,000,"",false,返回的是false,!addr返回的就是真,!!addr返回的就是假 console.log("寫法四,單純用!來判斷"); if (!addr) { console.log("addr沒值,為empty"); } else { console.log("addr有值,不為empty"); } if (!billAddr) { console.log("billAddr沒值,為empty"); } else { console.log("billAddr有值,不為empty") } if (!homeAddr) { console.log("homeAddr沒值,為empty"); } else { console.log("homeAddr有值,不為empty"); } if (!numberZero) { console.log("numberZero沒值,為empty"); } else { console.log("numberZero有值,不為empty") } if (!boolFalse) { console.log("boolFalse沒值,為empty"); } else { console.log("boolFalse有值,不為empty"); }
測試結果如下:
ref:https://www.delftstack.com/howto/javascript/javascript-check-if-string-is-empty/