题 你如何检查JavaScript中的空字符串?


我看到了这个 线,但我没有看到JavaScript特定的例子。有一个简单的 string.Empty 可以在JavaScript中使用,或者仅仅是检查的情况 ""


2147
2017-09-30 17:17


起源


仅供参考,我认为String类最有用的API是 Mozilla的 和 javascript工具包。 [elated.com](elated.com/articles/working-with-strings )有一个关于String的所有属性,方法的教程,...请注意:Mozilla链接已更新为 developer.mozilla.org/en/JavaScript/Reference/Global_Objects/... - Gene T


答案:


如果你只想检查是否有任何价值,你可以这样做

if (strValue) {
    //do something
}

如果你需要专门检查空字符串是否为空,我会考虑检查 "" 使用是你最好的选择 === 操作者 (所以你知道它实际上是你正在比较的字符串)。

if (strValue === "") {
    //...
}

2743
2017-09-30 17:20



测试length属性实际上可能比对“”测试字符串更快,因为解释器不必从字符串文字创建String对象。 - Vincent Robert
@Vincent在Chrome开发者工具中做了一些天真的分析,测试 === '' VS .length 没有显示任何明显的改善(和使用 .length 只有在你可以假设你有一个字符串时才有效 - bdukes
@bdukes当你开始关心那种微观优化时,我不认为Chrome是你遇到大部分性能问题的浏览器...... - Vincent Robert
需要注意的是,如果您对“空字符串”的定义包含空格,则此解决方案不合适。一个包含1个或多个空格的字符串在上面返回true。如果你正在使用JQuery,你可以简单地使用它:if($ .trim(ref).length === 0) - 根据类似问题的答案: stackoverflow.com/questions/2031085/... - CodeClimber
正如所料 .length > 0 实际上是 快多了 而不是字符串文字!看看这个 jsPerf - Chad


为了检查字符串是否为空,null或未定义,我使用:

function isEmpty(str) {
    return (!str || 0 === str.length);
}

为了检查字符串是否为空,null或未定义,我使用:

function isBlank(str) {
    return (!str || /^\s*$/.test(str));
}

用于检查字符串是空白还是仅包含空格:

String.prototype.isEmpty = function() {
    return (this.length === 0 || !this.trim());
};

903
2017-07-16 01:45



为什么0 === str.length而不是str.length === 0? - Vincent
@Vincent条件通常是这样写的 if (variable == constant value) 如果你忘了'='那么你就是将常量值赋给变量而不是测试。代码仍然有效,因为您可以在if中分配变量。因此,编写此条件的更安全方法是反转常量值和变量。这样,当您测试代码时,您将看到错误(分配中的无效左侧)。你也可以使用像JSHint这样的东西来禁止在条件中进行赋值,并在你编写条件时发出警告。 - florian
惭愧 /^\s*$/.test(str) 是不是真的可读 - 可能使用更简单的代码或正则表达式删除空格会更好?看到 stackoverflow.com/questions/6623231/... 并且 stackoverflow.com/questions/10800355/... - Adrien Be
/^\s*$/.test(str)可以替换为str.trim()。length === 0 - Schadenfreude
@Vincent这也叫做“尤达条件”之类的 if blue is the sky。看到 dodgycoder.net/2011/11/yoda-conditions-pokemon-exception.html - AZ.


以上所有都很好,但这会更好。使用 !!不是这样的)运营商。

if(!!str){
some code here;
}

或使用类型铸造:

if(Boolean(str)){
    codes here;
}

两者都做同样的功能,输入变量为boolean,where str 是一个变量。
返回 false 对于 null,undefined,0,000,"",false
返回 true 对于字符串“0”和空格“”。


225
2018-03-30 13:34



为什么这“更好”? - Mene
行为之间有什么区别吗? if(str) 和 if(!!str)? - Peter Olson
@PeterOlson如果你试图将变量保存为检查多个字符串内容的布尔值,那么你会想要这样做.. aka var any = (!!str1 && !!str2 && !!str3) 如果那里有一个数字也要处理 - John Ruddell
这是我一直使用的解决方案。 !!str.trim() 确保字符串不仅仅由空格组成。 - Dario Oddenino
看起来不像黑客, Boolean(str) 更具可读性,更少“重要”。 - shinzou


如果你需要确保字符串不只是一堆空格(我假设这是用于表单验证),你需要对空格进行替换。

if(str.replace(/\s/g,"") == ""){
}

88
2017-09-30 23:08



但是,如果您真正想要测试的是具有非空间内容的字符串,那么该工作是否可行。有没有更便宜的方法来测试这个? - flash
长度属性怎么样? - driAn
而不是删除所有空格,为什么不检查是否有非空格?如果存在非空格字符,它有两个优点,它可以提前纾困,并且它没有返回一个新的字符串,然后你检查。 if(str.match(/\S/g)){} - mpen
@Mark FYI,你不需要全局修饰符,因为第一次出现非空格字符的匹配意味着字符串不为空: str.match(/\S/) - neezer
重要提示:如果出现错误,则会抛出错误 str 是 null。 - nfechner


你可以得到str.Empty最接近的事情(str的前提条件是String)是:

if (!str.length) { ...

75
2017-09-30 19:17





我用 :

function empty(e) {
  switch (e) {
    case "":
    case 0:
    case "0":
    case null:
    case false:
    case typeof this == "undefined":
      return true;
    default:
      return false;
  }
}

empty(null) // true
empty(0) // true
empty(7) // false
empty("") // true
empty((function() {
    return ""
  })) // false

44
2017-07-09 18:52



此解决方案更加语言无关。它依赖的唯一JavaScript功能是typeof。因此,当您不信任不同浏览器中的实现并且没有时间获取更好的解决方案时,它就是您可以使用的解决方案的一个很好的示例。 (IE,没有互联网接入)。这就像一个证据。不是最干净的,但你可以肯定它会在不了解JavaScript的情况下工作。 - Jeff Davis
我会更进一步,并使用===运算符指出未定义的情况。否则它只是完美的答案。 - Carlos Alberto Martínez Gadea
该 typeof 在里面 switch 对我不起作用。我加了一个 if (typeof e == "undefined") 测试,这是有效的。为什么? - Lucas


var s; // undefined
var s = ""; // ""
s.length // 0

JavaScript中没有任何代表空字符串的内容。对任何一个进行检查 length (如果你知道var将永远是一个字符串)或反对 ""


23
2017-09-30 17:42





尝试:

if (str && str.trim().length) {  
    //...
}

22
2018-01-09 02:54



长度属性是否必要? - frogcoder


我不会过分担心 高效 方法。使用你的意图最明确的。通常对我来说 strVar == ""

编辑:每条评论来自 康斯坦丁,如果strVar可能会最终包含一个整数0值,那么这确实是那些意图澄清情况之一。


21
2017-09-30 17:20



馊主意。如果strVar意外分配0,你会得到真的。 - Constantin
我同意明确你的意图比任何其他方法可能产生的微优化更重要,但使用 严格比较运算符  === 会更好。它只返回true strVar 是一个空字符串。 - Useless Code
如果未定义,则检查失败。所以如果(str)效果更好 - Valentin Heinitz
@ValentinHeinitz如果str被赋值为0或“0”,if(str)将错误地报告为true。最好的方法是if(str ===“”)。它很简单,永远不会失败。 - Scott Marcus
应该在JavaScript比较中使用哪个等于运算符(== vs ===)? - nobar


功能:

function Is_Empty_or_Undefined (MyVar){      return (

        (typeof MyVar== 'undefined')
                    ||
        (MyVar == null) 
                    ||
        (MyVar == false)  //!MyVariable
                    ||
        (MyVar.length == 0)
                    ||
        (MyVar == "")
                    ||
        (MyVar.replace(/\s/g,"") == "")
                    ||
        (!/[^\s]/.test(MyVar))
                    ||
        (/^\s*$/.test(MyVar))
  );
}

19
2018-02-27 20:31



你有没有机会解释每张支票的作用? :) - DanV
-1他们正在测试不同的东西。将它们全部合并在一起是没有意义的 if 声明。 - Bennett McElwee
@Bennett很确定他只是为了展示不同的方式...... - Robert Pounder
typeof MyVariable =='undefined'不会识别具有未定义值的初始化变量和未声明的变量,除非该变量最初被声明并初始化为null。检查length属性会导致字符串原语包装在字符串对象中。 - Scott Marcus


你也可以使用正则表达式:

if((/^\s*$/).test(str)) { }

检查空白或填充空格的字符串。


17
2018-05-31 14:57



它有效,但它也是非常昂贵的操作。好的,如果你只是想检查一两件事,而不是一大套。 - Orpheus