4043

是否有字符串。清空还是只是检查""?

7

55个答案55

重置为默认值
4999

空字符串,未定义,null。。。

要检查真实价值:

if(strValue){//strValue是非空字符串,true,42,Infinity,[]。。。}

要检查假值:

if(!strValue){//strValue为空字符串,false,0,null,undefined。。。}

空字符串(仅!)

要精确检查空字符串,请将严格相等性与""使用===操作人员:

if(strValue===“”){//strValue为空字符串}

要严格检查非空字符串,请使用!==操作人员:

if(strValue!==“”){//strValue不是空字符串}
13
  • 280
    测试长度属性实际上可能比根据“”测试字符串快,因为解释器不必从字符串文本创建string对象。 评论 2008年10月1日20:07
  • 80
    @Vincent在Chrome开发工具中进行一些天真的分析,测试=== ''.长度没有显示出任何明显的改善(并且使用.长度只有当您可以假设您有字符串时才有效)
    – 布基斯
    评论 2010年9月27日13:19
  • 47
    @当你开始关心这种微优化时,我不认为Chrome是你遇到大多数性能问题的浏览器。。。 评论 2010年9月27日16:18
  • 40
    只需注意,如果您的“空字符串”定义中包含空格,则此解决方案不合适。上面由1个或多个空格组成的字符串返回true。如果您正在使用JQuery,您可以简单地使用这个:If($.trim(ref).length===0)-根据对类似问题的回答:stackoverflow.com/questions/2031085/… 评论 2011年10月3日15:02
  • 154
    如预期的那样长度>0实际上是速度快得多与字符串文字相比!看看这个jsPerf(jsPerf)
    – 乍得
    评论 2011年11月28日21:54
1431

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

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

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

或者,您可以使用(并非如此)新的可选链接和箭头功能来简化:

const isEmpty=(str)=>(!str?.length);

它将检查长度,返回未定义如果是nursh值,则不会抛出错误。在空值的情况下,零是错误的,结果仍然有效。

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

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

如果你愿意,你可以monkey-patch游戏这个字符串原型如下:

String.prototype.isEmpty=函数(){//这与使用的isEmpty函数的工作方式不同//在第一个示例中,对于只包含空格的字符串,它将返回truereturn(this.length===0||!this.trim());};console.log(“示例”.isEmpty());

请注意,monkey-patch内置类型是有争议的,因为无论出于何种原因,它都可能破坏依赖于内置类型现有结构的代码。

14
  • 47
    为什么0===str.length而不是str.lengsh===0?
    – 文森特
    评论 2013年9月23日8:11
  • 134
    @文森特条件通常是这样写的if(变量==常量)如果你忘记了一个“=”,那么你就把常数值赋值给变量,而不是测试。代码仍然可以工作,因为您可以在if中分配变量。因此,编写此条件的一种更安全的方法是反转常量值和变量。这样,当您测试代码时,会看到一个错误(赋值中的左手边无效)。您还可以使用JSHint等工具来禁止条件中的赋值,并在编写条件时收到警告。 评论 2013年9月23日9:58
  • 12
    /^\s*$/.test(str)可以替换为str.trim()。length==0 评论 2015年6月19日12:35
  • 51
    @文森特,这也被称为“尤达条件”,比如如果天空是蓝色的。请参阅dodgycoder.net/2011/11/yoda-conditions-pokemon-exception.html 评论 2016年1月26日0:12
  • 虽然扩展本地原型并不是一个好主意,但它通常被认为是一种不好的做法,许多人只是建议不要这样做,因为有同样好的更安全的方法。关于这个主题有一个SO讨论在这里,但我读过的每一本JS编程书都强烈建议不要这样做。对于OP问题,我通常只是这样做如果(!str){//我确信str为空null或未定义,如果我确信它不是另一种数据类型} 评论 2020年1月8日18:55
561

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

if(!!str){//这里有一些代码}

或使用类型转换:

if(布尔值(str)){//此处输入代码}

两者的功能相同。将变量类型转换为布尔值,其中字符串是一个变量。

  • 它会返回对于无效的,未定义,0,000,"",.

  • 它会返回真的对于空字符串以外的所有字符串值(包括以下字符串"0"" ")

15
  • 57
    Is there any difference between the behavior ofif(str)if(!!str)? 评论 2014年12月19日18:28
  • 7
    @PeterOlson如果您试图将变量保存为布尔值,以检查多个字符串的内容,那么您应该这样做。。阿卡var any=(!!str1&&!!str2&&!str3)如果里面也有数字的话就处理 评论 2015年3月10日23:00
  • 51
    这是我一直使用的解决方案。!!str.修剪()以确保字符串不只是由空白组成的。 评论 2016年2月11日10:56
  • 29
    看起来不像是黑客,布尔值(str)可读性更强,“wtfish”更少。
    – 神州
    评论 2016年10月17日21:28
  • 11
    这在如果,它将错误的值转换为和真实的价值观真的.A型如果块执行与否取决于表达式是否正确,没有意义添加!! 评论 2020年9月8日9:03
136

你能得到的最接近的东西str.空(前提条件是str是String)是:

if(!str.length){。。。
  • 27
    如果str为null,会抛出异常吗? 评论 2018年9月11日13:50
  • 8
    @PicMickael是的!那也会str.空. 评论 2018年9月12日3:25
  • 1
    注意,字符串并不是唯一具有长度属性。数组也可以。
    – 弗利姆
    评论 2021年8月11日15:15
117

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

if(str.replace(/\s/g,“”)==“”){}
8
  • 8
    但是,如果你真正想测试的是一个包含非空格内容的字符串,那么就要做这项工作了。有没有一种成本更低的方法来测试它?
    – 闪光
    评论 2010年10月22日10:02
  • 4
    长度属性如何? 评论 2010年11月11日13:57
  • 30
    与其删除所有空格,不如检查一下是否有非空格?有两个优点,如果有非空格字符,它可以提前退出,并且它没有返回一个新的字符串,然后再进行检查。if(str.match(/\S/g)){} 评论 2011年6月20日4:29
  • 34
    @请注意,您不需要全局修饰符,因为非空格字符第一次出现的匹配意味着字符串不为空:str.match(/\S/)
    – 尼泽
    评论 2011年6月27日15:04
  • 2
    也许/\S/.测试(str)str.match(/\S/)因为它不需要返回匹配结果的数组(可能是微性能增益)。此外,当测试针对regexp的字符串,使用regexp.test()(测试)更好地传达这种意图的方法。 评论 2016年12月7日20:19
81

我使用:

函数为空(e){开关(e){案例“”:案例0:案例“0”:大小写为null:案例错误:大小写未定义:返回true;违约:返回false;}}空(null)//真空(0)//真空(7)//假空(“”)//真空((function(){返回“”}))//错误
10
  • 6
    这个解决方案更不依赖于语言。它唯一依赖的JavaScript特性是typeof。因此,当你不信任不同浏览器中的实现,也没有时间获得更好的解决方案时,这是一个很好的解决方案示例。(IE,无互联网接入)。这有点像证据。虽然不是最干净的,但您可以确保它可以在不太了解JavaScript的情况下工作。 评论 2012年4月20日13:11
  • 2
    我会更进一步,用一个===运算符来确定未定义的情况。否则,这只是一个完美的答案。 评论 2018年1月25日10:06
  • 1
    这个类型在中转换不适合我。我添加了一个if(类型e==“未定义”)测试,这就行了。为什么?
    – 卢卡斯
    评论 2018年4月17日11:15
  • 2
    案例类型(e)==“未定义”:是错误的;e(电子)属于,不是的未定义显然这是一个建议的编辑获得批准。原件此的案例类型==“未定义”:仍然没有任何意义。也没有理由考虑,0,以及"0"“空”。 评论 2021年7月2日0:54
  • 2
    此函数对返回true为空(“0”)这对我来说是令人惊讶和不受欢迎的行为。在Javascript中,"0"在布尔上下文中计算为true,因此我不希望它被视为空。
    – 弗利姆
    评论 2021年8月11日14:57
75

性能

我对执行测试macOS v10.13.6(High Sierra)针对18个选定解决方案。解决方案的工作方式略有不同(对于角落输入数据),如下面的代码片段所示。

结论

  • 基于的简单解决方案!字符串,==,===长度对所有浏览器(A、B、C、G、I、J)都很快
  • 基于正则表达式的解决方案(测试,代替)和字符位于对于所有浏览器(H、L、M、P)来说都是最慢的
  • 标记为最快的解决方案仅在一次测试运行中最快,但在许多运行中,它会在“快速”解决方案组中更改

在此处输入图像描述

细节

在下面的片段中,我通过使用不同的输入参数来比较选择的18种方法的结果

  • "" “a” " "-空字符串、带字母的字符串和带空格的字符串
  • [] {} (f)-数组、对象和函数
  • 0 1 NaN公司 无限-数字
  • 真的 -布尔值
  • 无效的 未定义

并非所有测试的方法都支持所有输入案例。

函数A(str){设r=1;if(!str)r=0;返回r;}函数B(str){设r=1;如果(str==“”)r=0;返回r;}函数C(str){设r=1;如果(str===“”)r=0;返回r;}函数D(str){设r=1;如果(!str||0===str.length)r=0;返回r;}函数E(str){设r=1;if(!str||/^\s*$/.test(str))r=0;返回r;}函数F(str){设r=1;if(!布尔值(str))r=0;返回r;}函数G(str){设r=1;if(!((typeof str!='undefined')&&str))r=0;返回r;}函数H(str){设r=1;if(!/\S/.test(str))r=0;返回r;}函数I(str){设r=1;if(!str.length)r=0;返回r;}函数J(str){设r=1;if(str.length<=0)r=0;返回r;}函数K(str){设r=1;if(str.length===0 | |!str.trim())r=0;返回r;}函数L(str){设r=1;if(str.replace(/\s/g,“”)==“”)r=0;返回r;}函数M(str){设r=1;if((/^\s*$/).test(str))r=0;返回r;}函数N(str){设r=1;if(!str||!str.trim().length)r=0;返回r;}函数O(str){设r=1;if(!str||!str.trim())r=0;返回r;}函数P(str){设r=1;if(!str.charAt(0))r=0;返回r;}函数Q(str){设r=1;if(!str||(str.trim()==''))r=0;返回r;}函数R(str){设r=1;if(typeof str==“未定义”||!字符串||str.length===0||str===“”||!/[^\s]/.test(字符串)||/^\s*$/.test(str)||str.replace(/\s/g,“”)===“”)r=0;返回r;}//---测试---console.log('“”“a”“[]{}0 1 NaN Infinity f true false null undefined');让log1=(s,f)=>控制台.log(`${s}:${f(“”)}${f;让log2=(s,f)=>控制台.log(`${s}:${f(“”)}${f;让log3=(s,f)=>console.log(`${s}:${f(“”)}${f;log1('A',A);log1(“B”,B);log1(‘C’,C);log1('D',D);log1(“E”,E);log1(‘F’,F);log1(“G”,G);log1(‘H’,H);log2(“I”,I);log2(‘J’,J);log3(‘K’,K);log3(‘L’,L);log3('M',M);log3(‘N’,N);log3(“O”,O);log3(‘P’,P);log3(‘Q’,Q);log3('R',R);

然后对所有方法执行速度测试用例str=“”对于浏览器Chrome v78.0.0、Safari v13.0.4和Firefox v71.0.0,您可以在机器上运行测试在这里

在此处输入图像描述

1
  • 2
    有点误导,因为它结合了修剪解决方案和无修剪解决方案。
    – 肖恩
    评论 2020年12月4日9:47
62

您可以使用洛达什:_.isEmpty(值)。

它涵盖了很多情况,比如{},'',无效的,未定义等。

但它总是回来真的对于编号的类型JavaScript基元数据类型喜欢_.is空(10)_.isEmpty(数字.MAX_VALUE)两个返回真的.

  • _.is空(“”);//=>
    – 埃里奇
    评论 2020年2月13日15:56
  • 2
    @Erich因为" "不为空。_.is空(“”);返回true。
    – 莫西
    评论 2020年3月25日7:34
  • 1
    非常正确&我提到这一点是因为这里的一些其他答案意味着表单验证和检查字符串是否仅由空白组成,而这个单独的lodash函数本身并不能解决这个问题。
    – 埃里奇
    评论 2020年3月26日0:30
44

非常通用的“一体式”功能(但不推荐):

函数为空(x){return(//在return后不放换行符(x的类型==“未定义”)||(x==空)||(x==false)//与:相同!x个||(x.length==0)||(x==0)//注意这一行,您可能不需要它。||(x==“”)||(x.replace(/\s/g,“”)==“”)||(!/[^\s]/.test(x))||(/^\s*$/.test(x)));}

然而,我不建议使用它,因为您的目标变量应该是特定类型(即字符串、数字或对象?),所以应用与该变量相关的检查。

  • 你能解释一下每一张支票的用途吗
    – 丹佛
    评论 2014年3月21日12:13
  • 4
    -1他们正在测试不同的东西。把它们放在一起是没有意义的如果声明。 评论 2014年4月1日22:39
  • 2
    typeof MyVariable==“undefined”无法区分具有未定义值的初始化变量和未声明变量,除非该变量最初声明并初始化为null。检查长度属性会导致字符串原语被包装在字符串对象中。 评论 2016年1月28日21:57
43
变量s;//未定义var s=“”;//""s.长度//0

JavaScript中没有表示空字符串的内容。对其中之一进行检查长度(如果您知道var将始终是一个字符串)或反对""

1
  • 我不明白这句话:JavaScript中没有表示空字符串的内容。.关于"",这不代表一个空字符串吗?
    – 弗利姆
    评论 2021年8月11日15:17
42

尝试:

if(str&&str.trim().length){//...}
2
  • str.trim().长度会比str.修剪()根据我自己的测试结果,大约减少了1%。
    – 恶魔岛
    评论 2019年3月6日6:32
  • OP正在测试空字符串、未定义字符串或空字符串。这是在测试一个字符串,该字符串不是这些条件中的任何一个。他也没有提到纯空白字符串。只要您确定变量中没有存储其他数据类型,就可以用这个测试OP的条件:if(!str){…} 评论 2020年1月8日19:10
33

我不会太担心有效率的方法。使用最清楚你的意图。对我来说,这通常是strVar==“”.

根据来自的评论康斯坦丁,如果strVar最终可能包含一个整数0值,那么这确实是意图明确的情况之一。

5
  • 13
    坏主意。如果意外地将strVar赋值为0,则会为true。 评论 2008年9月30日19:21
  • 5
    我同意,明确你的意图比任何其他方法可能产生的微观优化都重要,但使用严格比较运算符 ===会更好。只有在以下情况下才返回true字符串变量是空字符串。 评论 2015年6月13日17:52
  • 如果未定义,则检查失败。所以如果(str)工作得更好 评论 2015年12月27日13:57
  • 4
    @ValentinHeinitz如果str被赋值为0或“0”,如果(str)将错误地报告为true。最好的方法是if(str===“”)。这很简单,永远不会失败。 评论 2016年1月28日22:02
  • 1
27
if((输入?.trim()?)?。长度||0)>0){//输入不得为以下任何一项://未定义//空// ""//“”或只是空白}

或以函数形式:

const isNotNilOrWhitespace=input=>(输入?.trim()?。长度|0)>0;const isNilOrWhitespace=input=>(输入?.trim()?。长度||0)===0;

说明:

如果输入未定义无效的然后是空合并?.将导致输入?。修剪()?。长度未定义无效的.O型圈(||)那个有0将给予0.0不是> 0因此结果是,即该值为零。

如果输入则为空或空白.trim()将删除前导和结尾空白,这将使空输入保持不变,并将任何空白转换为空值。空字符串的长度为0,如上所述,0不是> 0,因此结果是,即它是空的或只有空白。

如果输入是任何其他字符串,调用后其长度将大于0.trim(),因此结果是真的,即它不是一个零值,也不是空的或只有空白。

  • 2
    你能再解释一下吗? 评论 2021年12月7日12:59
  • 添加了解释 评论 2023年5月14日0:58
  • 为什么这么复杂?怎么样const isNilOrWhitespace=input=>!输入?。trim();
    – 托马斯
    评论 2023年6月30日20:45
25

这里有很多有用的信息,但我认为,其中一个最重要的因素没有得到解决。

无效的,未定义,以及""都是虚伪的.

当计算一个空字符串时,通常是因为您需要用其他东西替换它。

在这种情况下,您可以预期以下行为。

var a=“”var b=空var c=未定义console.log(a | |“falsy-string provided”)//打印->“falsy string proved”console.log(b | |“提供虚假字符串”)//打印->“提供虚假串”console.log(c | |“falsy-string provided”)//打印->“falsy string proved”

考虑到这一点,可以返回字符串是否为"",无效的,或未定义(无效字符串)与有效字符串的比较简单如下:

const validStr=(str)=>str?真:假validStr(未定义)//返回falsevalidStr(null)//返回falsevalidStr(“”)//返回falsevalidStr(“我的字符串”)//返回true

请注意,您可能也想修剪()字符串自"" !== " ".

2
  • 谢谢,我喜欢你的anwser,它太简单了。所以只需使用:如果(str){//some code}当str不为null时&&未定义&&不为空字符串,那么if条件为true
    – 子桑
    评论 2023年8月1日19:19
  • 是的,你能做到。然而,您可能希望确保没有空白。因为:js const emptStr=“”与不同js const notEmptyStr=“”后者并非虚假。
    –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––trn450型
    评论 2023年12月5日17:22
23

有很多答案,也有很多不同的可能性!

毫无疑问,对于快速简单的实施,获胜者是:if(!str.length){…}

然而,还有许多其他的例子。我建议,实现这一目标的最佳功能方法是:

函数为空(str){if(类型str=='undefined'||!str||str.length==0||str===“”||!/[^\s]/.test(str)||/^\s*$/.test返回true;其他的返回false;}

我知道有点过分。

4
  • 2
    检查未定义项需要移至检查中的第一个位置,否则未定义项将在之前的检查中引发异常。 评论 2016年6月16日14:10
  • 完全同意!抓得好。我会编辑上面的答案! 评论 2016年6月17日15:17
  • str.length===0对于任何没有形式参数的函数,返回true。
    – 罗布·G
    评论 2019年10月16日12:52
  • str.length===0 | | str===“”两者将执行相同的任务。 评论 2020年11月3日12:06
22

您还可以使用正则表达式:

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

检查字符串是否为空或填充空白。

1
  • 1
    它很管用,但也非常昂贵。如果你只想检查一两件东西,而不是一大堆,那就好了。 评论 2015年5月11日16:38
22
  1. 检查一下变量a;存在

  2. 删除值中的假空格,然后测试是否为空

    if((a)&&(a.trim()!=“”)){//如果变量a不为空,则执行此操作}
1
  • 字符串" "不为空,但在此条件下它将被视为空。
    – 弗利姆
    评论 2021年8月11日15:18
21

我通常使用这样的东西,

if(!str.length){//做点什么}
4
  • 4
    如果知道变量是字符串,则速度最快。如果变量未定义,则抛出错误。 评论 2014年2月20日10:16
  • @Adrian Hope-Bailie为什么要测试未定义的变量? 评论 2014年4月1日0:18
  • @AbimaelMartell为什么不?您有一个变量,该变量要么是您声明的,要么是从您无法控制的某个范围传递给您的,例如在方法或API调用的响应中。您可以假设它包含一个值并使用上面的检查,但如果它没有定义或为空,您将得到一个错误。var测试=空;if(!test.length){alert(“adrian是错误的”);} 评论 2014年4月1日8:28
  • OP询问“如何检查空字符串”,未定义的变量不是空字符串。无论如何,您可以检查变量类型!=“未定义”在检查是否为空之前。 评论 2014年4月1日18:56
19

此外,如果您认为空白填充字符串为“空”。

您可以使用以下正则表达式进行测试:

!/\S/.测试(字符串);//如果为空,则返回true。
17

如果需要检测空字符串和空白字符串,我将在Goral的答案中添加:

函数为空{返回!s.长度;}函数为空白{return为Empty(s.trim());}
15

开始于:

return(!value||value==未定义||value=“”||value.length==0);

查看最后一个条件,如果value==“”,则其长度必须为0。因此,放下它:

return(!value||value==未定义||value=“”);

但是等等!在JavaScript中,空字符串为false。因此,落差值=“”:

return(!value||value==未定义);

还有!undefined为true,因此不需要检查。因此,我们有:

return(!value);

我们不需要括号:

返回!价值
1
  • 如果值=假值=0.你会根据问题返回正确的答案吗?
    – 内雷兹
    评论 2020年4月28日4:15
15

我使用一个组合,最快的检查是第一个。

函数isBlank(pString){if(!pString){返回true;}//检查非空白字符//我认为[需要引用]更快//而不是删除所有空白并进行检查//针对空字符串返回/[^\s]+/.test(pString);}
4
  • 你能解释一下什么时候需要检查长度吗?不会!pString捕获任何空字符串?这似乎有效。var test='';if(!test)警报('empty'); 评论 2011年10月27日21:49
  • 2
    直到十年后,我才看到这个评论。但是的,你说得对,我会更新
    – 威尔
    评论 2021年7月5日15:06
  • 1
    结合我们十年的知识:) 评论 2021年7月6日16:16
  • @尼科尔2031年见!
    – 威尔
    评论 2021年7月17日0:53
14

我还没有注意到一个考虑到字符串中存在null字符可能性的答案。例如,如果我们有一个null字符串:

var y=“\0”;//空字符串,但具有空字符(y===“”)//false,对空字符串进行测试不起作用(y.length===0)//错误(y) //真的,这也是意料之外的(y.match(/^[\s]*$/))//false,同样不需要

要测试它的空性,可以这样做:

String.prototype.isNull=函数(){return Boolean(this.match(/^[\0]*$/));}...“\0”.isNull()//为真

它适用于空字符串和空字符串,并且所有字符串都可以访问它。此外,它可以扩展为包含其他JavaScript空字符或空白字符(即非中断空格、字节顺序标记、行/段落分隔符等)。

1
  • 2
    有趣的分析。我认为这与99.9%的案件无关。但我最近发现,如果(并且仅当)一列包含空字符(“\0”),MySQL会将该列计算为“null”。另一方面,Oracle不会将“\0”计算为null,而是将其视为长度为1的字符串(其中一个字符是null字符)。如果处理不当,这可能会导致混淆,因为许多web开发人员确实使用后端数据库,后端数据库可能会传递不同类型的“null”值。它应该在每个开发人员的脑海中。 评论 2012年10月20日12:20
12

同时,我们可以使用一个函数来检查所有“清空”,如null、未定义、“”、“”,{}、[].所以我写了这个。

var isEmpty=函数(数据){if(typeof(data)===“对象”){if(JSON.stringify(data)==='{}'||JSON.strongify{返回true;}否则if(!data){返回true;}返回false;}else if(typeof(data)===“字符串”){if(!data.trim()){返回true;}返回false;}else if(typeof(data)===“未定义”){返回true;}其他{返回false;}}

用例和结果。

console.log(isEmpty());//真的console.log(isEmpty(null));//真的console.log(isEmpty(“”));//真的console.log(isEmpty(“”));//真的console.log(isEmpty(未定义));//真的console.log(isEmpty({}));//真的console.log(isEmpty([]));//真的console.log(isEmpty(0));//console.log(isEmpty('Hey'));//
0
12

我做了一些研究,看看如果向测试函数传递一个非字符串和非空/空值会发生什么。正如许多人所知,(0==“”)在JavaScript中是正确的,但由于0是一个值,并且不是空的或null,您可能需要测试它。

以下两个函数仅对未定义、null、空/空白值返回true,对其他所有值返回false,例如数字、布尔值、对象、表达式等。

函数IsNullOrEmpty(值){return(value==null||value===“”);}函数IsNullOrWhiteSpace(值){return(value==null||!/\S/.test(value));}

存在更复杂的例子,但这些都很简单,并给出了一致的结果。无需测试未定义,因为它包含在(value==null)检查中。你也可以模仿C类#将它们添加到String中,如下所示:

字符串。IsNullOrEmpty=函数(值){…}

您不希望将其放在Strings原型中,因为如果String-class的实例为null,它将出错:

字符串原型。IsNullOrEmpty=函数(值){…}var myvar=空;如果(1==2){myvar=“OK”;}//可以设置米瓦尔。IsNullOrEmpty();//抛出错误

我使用以下值数组进行了测试。如果有疑问,可以循环测试函数。

//助手项目var MyClass=函数(b){this.a=“Hello World!”;this.b=b;};MyClass.prototype.hello=函数(){if(this.b==null){alert(this.a);}else(this.b);}};var z;var arr=[//0:打印说明,1:实际值[“未定义”,未定义],['(var)z',z],['null',null],[“空”,“”],['space',''],['tab','\t'],['newline','\n'],['carriage return','\r'],['“\\r\\n”','\r\n'],['“\\n\\r”','\n\r'],['“\\t\\n”','\t\n'],['“txt\\t测试”,'txt\t测试'],[“文本”,“文本”],['“未定义”','未定义'],['“null”','null'],['"0"', '0'],['“1”','1'],['"1.5"', '1.5'],['“1,5”','1,5'],//在某些区域设置中是有效的数字,而不是在JavaScript中['逗号',','],[“不”,“.”],['".5"', '.5'],['0', 0],['0.0', 0.0],['1', 1],['1.5', 1.5],['NaN',NaN],['/\S/',/\S/],[真的,真的],[假',假],['function,returns true',function(){return true;}],['函数,返回false',函数(){return false;}],['function,returns null',function(){return null;}],['function,returns string',function(){return“test”;}],['函数,返回未定义的',函数(){}],['MyClass',MyClass],['新建MyClass',新建MyClass()],['空对象',{}],['非空对象',{a:“a”,match:“伪对象”,test:“伪”}],['object with toString:string',{a:“a”,match:“bogus”,test:“bougs”,toString:函数(){return“test”;}}],['object with toString:null',{a:“a”,match:“bogus”,test:“bougs”,toString:函数(){return null;}}]];
1
  • 如果您只需停止使用==并使用===,那么这就解决了如果(s===“”)的问题。 评论 2016年1月28日22:05
12

我在这里没有看到一个好答案(至少没有一个适合我的答案)

所以我决定回答自己:

value===未定义||value===null||value===“”;

您需要开始检查它是否未定义。否则,您的方法可能会爆炸,然后您可以检查它是否等于null或等于空字符串。

你不能有!!或仅限if(值)因为如果你检查0它会给你一个错误的答案(0是错误的)。

话虽如此,但要用这样的方法来概括:

public static isEmpty(value:any):布尔值{返回值===未定义||value===空||value===“”;}

附言:你不需要检查类型,因为它会在进入方法之前爆炸并抛出

1
11

试试这个:

export const isEmpty=字符串=>(!string||!string.length);
11

所有这些答案都很好。

但我不能确定变量是否是字符串,是否只包含空格(这对我来说很重要),是否可以包含“0”(字符串)。

我的版本:

函数为空(str){返回!str||/[^\s]+/.测试(str);}空(null);//真的空(0);//真的空(7);//空(“”);//真的空(“0”);//空(“”);//真的

上的样本J小提琴.

5
  • 2
    嗯?如果您需要字符串,空(0)空(7)应该返回相同的值。 评论 2014年4月1日22:44
  • 在我的特殊情况下-空(“0”)必须返回(因为这是一个非空字符串),但空(0)必须返回真的因为它是空的:)
    – 安德龙
    评论 2014年4月2日11:24
  • 但是0不是空的!这是一个数字,数字不能是满的或空的。当然,这是你的职能,因此必须满足你的要求,但空的在这种情况下是一个误导性的名称。 评论 2014年4月2日21:15
  • 我想那个名字空的很好。在php文档中空的功能:如果var存在并且具有非空、非零值,则返回FALSE。否则返回TRUE。两者之间的差异菲律宾比索和这个函数-那个字符串'0'将不会标识为空。
    – 安德龙
    评论 2014年4月3日12:14
  • 正如我所说,这是你的功能:你想怎么叫就怎么叫。但是空的是一个不准确且具有误导性的名称。有趣的是,PHP也有一个命名不好的空的函数,但PHP的失败与JavaScript无关。 评论 2014年4月3日22:57
11

使用零平衡运算符修剪空白:

if(!str?.trim()){//做点什么。。。}
2
  • 它看起来很酷,但str.trim()就足够了。IMO永远不应该把事情过于复杂。 评论 2021年2月23日15:16
  • 2
    只是把它扔给那些可能需要它的人。?.再复杂不过了。.trim()将抛出错误,如果字符串为零。
    – 肖恩
    评论 2021年2月24日10:48
10

没有为空()方法,您必须检查类型和长度:

if(测试类型==='string'&&test.length====0){...

需要进行类型检查,以避免在以下情况下出现运行时错误测试未定义无效的.

1
  • 我很确定测试===“”相当于,而且更短。
    – 弗利姆
    评论 2021年8月11日15:21

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.