字符串是否为空判断:几行代码搞定常见陷阱

写程序时,经常要检查用户输没输内容、配置文件里某个字段有没有值、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() === "";
}

这样就能同时处理 nullundefined、数字 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(""),但万一 strnull,后者直接抛 NullPointerException。JDK 7+ 推荐用 Objects.toString(str, "").isEmpty(),或者更直白的:

if (str == null || str.trim().isEmpty()) {
System.out.println("为空");
}

真实场景小例子

做登录功能时,前端校验密码框:
用户点了提交,但密码输入框里只敲了几个空格——后台拿到的是 " ",如果没 trim 就存进数据库,下次他输空格也能登进去,这显然不行。所以不管是前端 JS 还是后端 Java/Python,只要涉及用户输入,第一步就是 trim() 再判断。