如何在JavaScript中检查变量是否为null、空字符串或全为空格?

160
我需要检查一个变量是否为null,或者它是否只有空格,或者是否为空("")。

我有以下代码,但它不起作用:

var addr;
addr = "  ";

if (!addr) {
    // pull error 
}
如果我按照以下方式操作,它就可以运行:
if (addr) {

}​

我需要的是类似于C#方法String.IsNullOrWhiteSpace(value)的功能。


5
你是说“有任何空格”,还是说“全部都是空格”? - Madbreaks
1
未定义的情况怎么办? - CodeToad
可能是如何在JavaScript中检查空字符串?的重复问题。 - T.Todua
16个回答

208

一个非jQuery解决方案,更接近于模拟 IsNullOrWhiteSpace,但用于检测 null、空字符串或只包含空格的情况:

function isEmptyOrSpaces(str){
    return str === null || str.match(/^ *$/) !== null;
}

然后:

var addr = '  ';

if(isEmptyOrSpaces(addr)){
    // error 
}

* 编辑 *请注意,提问者明确说明:

我需要检查一个变量是否为null,是否有任何空格,或者说只是空白

因此,虽然"空格"包括更多内容,而不仅仅是null、空格或空白,但我的答案旨在回答提问者的具体问题。这很重要,因为提问者可能不想捕获诸如制表符之类的东西。


92
空白字符也可以包括制表符、其他类型的空格等。使用“/^\s*$/”来捕获它们。 - grant
5
我故意没有这样做,因为原帖说:“我需要检查一个变量是否为null或有任何空格,或者只是空白”。 - Madbreaks
6
使用test()取代match()如何?返回值为str是否为null或全由空格组成。 - Mario Levrero
1
@MarioLevrero 我喜欢它!我记得 test 也更快。 - Madbreaks
13
楼主说:“我需要的是像 C# 中这个方法一样的东西:String.IsNullOrWhiteSpace”。该方法把制表符视为空白字符。 - subsci
显示剩余6条评论

65
if (addr == null || addr.trim() === ''){
  //...
}

如果你想要捕获nullundefined,可以进行空值比较。如果你希望false也被捕获,请使用!addr。为了向后兼容浏览器,将addr.trim()替换成$.trim(addr)


1
如果您想让false也通过,请使用!addr - 如果addr为零,它会崩溃。 - Madbreaks
2
为什么第一个是==而第二个是匹配的=== - Max
2
使用“addr == null”也会匹配未定义。如果您使用了“addr === null”,它只会匹配null。对于第二个匹配,使用===强制仅匹配空字符串。 - Ed Downs
@EdDowns 嗯,这就是为什么我们应该始终使用严格比较。如果需要检查 undefined,请明确地进行检查。这样可以使代码更易于理解和支持。 - Madbreaks

22

您可以使用 if(addr && (addr = $.trim(addr)))

这样做的好处是实际上可以从addr中删除任何外部空格,而不仅仅是在执行检查时忽略它。

参考: http://api.jquery.com/jQuery.trim/


3
当然,前提是操作者“想要”移除空格。 :) - Madbreaks
1
如果 addr 被初始化为整数等内容,则您的答案将返回错误结果。 - Madbreaks
如果没有更多的信息,我会假设这个变量如果不是null/undefined,它总是一个字符串。 - ThiefMaster
1
Op说“检查一个变量...”,他的例子展示了该变量是一个字符串,但我认为那只是为了演示这个想法而已。 - Madbreaks

19

虽然这个问题已经很老了,但我认为它值得一个更简单的答案。

你可以简单地这样做:

var addr = "  ";

if (addr && addr.trim()) {

    console.log("I'm not null, nor undefined, nor empty string, nor string composed of whitespace only.");

}

1
应该是 addr && addr.trim() 吧?只用一个 & 对我没用,但用 && 就好了。 - markv12

7

3
console.log(isNullOrWhitespace(0)); --> true - Madbreaks

5
您可以创建自己的方法,相当于 String.IsNullOrWhiteSpace(value)
function IsNullOrWhiteSpace( value) {

    if (value== null) return true;

    return value.replace(/\s/g, '').length == 0;
}

1
\s 匹配的不仅仅是空格。 - Madbreaks

4

这可能是最简单的方法

if (!addr?.trim()){
  //error
}

4

在检查空格时,C#方法使用Unicode标准。空格包括空格、制表符、回车和许多其他不可打印的字符代码。因此,最好使用以下代码:

function isNullOrWhiteSpace(str){
    return str == null || str.replace(/\s/g, '').length < 1;
}

Op明确表示目标是检查空格,而不是空白符。 - Madbreaks
7
Op说:“我需要像C#方法String.IsNullOrWhiteSpace(value)这样的东西。”如果你只是检查空格,不要将函数命名为isNullOrWhiteSpace,而应将其命名为IsNullOrEmpty。 - Joao Leme
C#方法可以工作,用于检查字符串是否为null或一系列空格。 Op希望有类似的东西,但是要特别检查空格。 - Madbreaks

4
isEmptyOrSpaces(str){
    return !str || str.trim() === '';
}

4
需要复制现有答案吗?或者你是否对之前的答案进行了更改,使其具有相关差异? - Nico Haase

1

我通常使用这个简单的方法,它对我大多数情况下都有效。首先去除空格,然后检查长度。

 if(value.trim().length === 0)
{
   //code for empty value
}

这个问题已经有相当多类似的答案了。 - IT goldman
是的,我真的发现其他人很难理解。 - KUSH
其他答案使用了“真值”和“假值”。假值包括空字符串、未定义和null。 - Welcor
有没有不使用这种方法的理由?在我看来,这似乎是最简单的方式。 - d0rf47

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接