如何在 JavaScript 中检查空/未定义/空字符串?

IT技术 javascript null is-empty
2021-01-30 06:36:43

我看到了这个问题,但我没有看到 JavaScript 特定的例子。string.EmptyJavaScript 中是否有简单的可用,或者只是检查的情况""

6个回答

如果您只想检查是否有真实,您可以执行以下操作:

if (strValue) {
    //do something
}

如果您需要专门为在空空字符串检查,我想核对""是你最好的选择,使用===运营商(让你知道这是,事实上,一个字符串你比较反对)。

if (strValue === "") {
    //...
}
测试 length 属性实际上可能比针对 "" 测试字符串更快,因为解释器不必从字符串文字创建 String 对象。
2021-03-12 06:36:43
请注意,如果您对“空字符串”的定义包含空格,则此解决方案不合适。1 个或多个空格的字符串在上面返回 true。如果您使用的是 JQuery,您可以简单地使用这个: if ($.trim(ref).length === 0) - 根据这个对类似问题的回答:stackoverflow.com/questions/2031085/...
2021-03-16 06:36:43
@bdukes 当您开始关心这种微优化时,我不认为 Chrome 是您遇到大部分性能问题的浏览器...
2021-03-19 06:36:43
正如预期的那样.length > 0,实际上比与字符串文字相比要快得多看看这个jsPerf
2021-03-24 06:36:43
@Vincent 在 Chrome 开发人员工具中做了一些简单的分析,测试=== ''vs.length没有显示出任何明显的改进(并且.length只有在你可以假设你有一个字符串的情况下使用才有效)
2021-03-30 06:36:43

为了检查变量是否为或者它的长度属性是否为零(对于字符串,这意味着它是空的),我使用:

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

(请注意,字符串并不是唯一具有length属性的变量,例如,数组也有它们。)

为了检查变量是否为假或者字符串是否仅包含空格或为空,我使用:

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

如果你愿意,你可以猴子打补丁String原型是这样的:

String.prototype.isEmpty = function() {
    // This doesn't work the same way as the isEmpty function used 
    // in the first example, it will return true for strings containing only whitespace
    return (this.length === 0 || !this.trim());
};
console.log("example".isEmpty());

请注意,猴子修补内置类型是有争议的,因为无论出于何种原因,它都会破坏依赖于内置类型现有结构的代码。

/^\s*$/.test(str) 可以替换为 str.trim().length === 0
2021-03-15 06:36:43
@Vincent 这也称为“尤达条件”,例如if blue is the sky. dodgycoder.net/2011/11/yoda-conditions-pokemon-exception.html
2021-03-15 06:36:43
可惜这/^\s*$/.test(str)不是真正可读的 - 也许使用更简单的代码或正则表达式删除空格会更好?参见stackoverflow.com/questions/6623231/...以及stackoverflow.com/questions/10800355/...
2021-03-21 06:36:43
为什么 0 === str.length 而不是 str.length === 0 ?
2021-03-24 06:36:43
@Vincent 条件通常是这样编写的if (variable == constant value),如果您忘记了 '=',那么您将常量值分配给变量而不是测试。代码仍然有效,因为您可以在 if 中分配变量。所以写这个条件的一个更安全的方法是将常量值和变量颠倒过来。这样,当您测试代码时,您会看到一个错误(分配中的左手边无效)。您还可以使用 JSHint 之类的东西来禁止在条件中赋值,并在编写时收到警告。
2021-03-27 06:36:43

以前的所有答案都很好,但这会更好。使用双非运算符 ( !!):

if (!!str) {
    // Some code here
}

或者使用类型转换:

if (Boolean(str)) {
    // Code here
}

两者都执行相同的功能。将变量类型转换为布尔值,其中str是一个变量。

  • 它返回falsenullundefined0000""false

  • 它返回true除空字符串以外的所有字符串值(包括像"0"这样的字符串" "

@PeterOlson 如果您试图将一个变量保存为一个布尔值来检查多个字符串的内容,那么您会想要这样做.. 也就是var any = (!!str1 && !!str2 && !!str3)处理是否有数字
2021-03-17 06:36:43
不是看起来像一个黑客,Boolean(str)是更具可读性和更少的“wtfish”。
2021-03-20 06:36:43
这在 a 中根本没用if,它将假值转换,并将真值转换falsetrueif块要么执行或不基于阉羊的表达是truthy,没有一点加入!!
2021-03-20 06:36:43
是否有行为之间的区别if(str)if(!!str)
2021-03-25 06:36:43
这是我一直使用的解决方案。!!str.trim()确保字符串不只由空格组成。
2021-04-02 06:36:43

你能得到的最接近的东西str.Empty(前提是 str 是一个字符串)是:

if (!str.length) { ...
不会抛出异常 str 为空吗?
2021-03-14 06:36:43
@PicMickael 是的!也会str.Empty
2021-03-28 06:36:43
请注意,字符串并不是唯一具有length属性的变量类型数组也是如此。
2021-04-08 06:36:43

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

if(str.replace(/\s/g,"") == ""){
}
但是,如果您真正想要测试的是具有非空格内容的字符串,那么就可以完成这项工作。有没有更便宜的方法来测试这个?
2021-03-12 06:36:43
长度属性如何?
2021-03-22 06:36:43
也许/\S/.test(str)str.match(/\S/)因为它不打扰返回匹配结果的数组更好(可能是那里的微性能增益)。此外,当仅针对 regexp测试字符串时,请使用 RegExp.test()方法来更好地传达该意图。
2021-03-31 06:36:43
@Mark FYI,您不需要全局修饰符,因为第一次出现非空格字符的匹配意味着字符串不为空: str.match(/\S/)
2021-04-02 06:36:43
与其删除所有空格,不如检查是否有非空格?有两个优点,如果有非空格字符,它可以提前退出,并且它没有返回一个新的字符串,然后您可以检查它。if(str.match(/\S/g)){}
2021-04-04 06:36:43