写程序时,经常要检查用户输没输内容、配置文件里某个字段有没有值、API 返回的数据是不是空字符串。看似简单的一句“判断字符串是否为空”,一不留神就踩坑。
空字符串 ≠ null ≠ undefined ≠ 只有空格
比如你收到一个表单提交的用户名:username = " "(全是空格),肉眼看是“空”,但直接用 username === "" 判断会返回 false。再比如后端没传这个字段,JS 里它可能是 undefined,这时候用 username.length 就直接报错 Cannot read property 'length' of undefined。
JavaScript 怎么安全判断?
最稳妥的做法是先确保变量存在,再去除首尾空格后判断长度:
function isEmpty(str) {
return str == null || String(str).trim() === "";
}这样就能同时处理 null、undefined、数字 0(转成字符串后是 "0",不为空)、""、" \t\n " 等各种情况。
Python 里更简洁
Python 的“假值”规则很明确:None、空字符串 ""、空列表 []、空字典 {} 都算 False。但注意:字符串只含空格不算空!
text = " "
if not text: # 这里会走 else 分支!
print("为空")
else:
print("不为空,但可能是空格")所以 Python 推荐写法是:
if not text or text.strip() == "":
print("真·为空或纯空格")Java 别直接用 == ""
新手常写 str == "" 或 str.equals(""),但万一 str 是 null,后者直接抛 NullPointerException。JDK 7+ 推荐用 Objects.toString(str, "").isEmpty(),或者更直白的:
if (str == null || str.trim().isEmpty()) {
System.out.println("为空");
}真实场景小例子
做登录功能时,前端校验密码框:
用户点了提交,但密码输入框里只敲了几个空格——后台拿到的是 " ",如果没 trim 就存进数据库,下次他输空格也能登进去,这显然不行。所以不管是前端 JS 还是后端 Java/Python,只要涉及用户输入,第一步就是 trim() 再判断。