当前位置:  开发笔记 > 编程语言 > 正文

如何在JavaScript中检查empty/undefined/null字符串?

如何解决《如何在JavaScript中检查empty/undefined/null字符串?》经验,为你挑选了32个好方法。

我看到了这个帖子,但我没有看到JavaScript特定的例子.有一个简单string.Empty的JavaScript可用,还是只是检查的情况""



1> bdukes..:

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

if (strValue) {
    //do something
}

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

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


测试length属性实际上可能比测试字符串""更快,因为解释器不必从字符串文字创建String对象.
正如预期的那样`.length> 0`实际上**比字符串文字要快得多**!看看这个[jsPerf](http://jsperf.com/vs-length-0)
@bdukes当你开始关心那种微优化时,我不认为Chrome是你遇到大部分性能问题的浏览器......
@Vincent在Chrome开发人员工具中做了一些天真的分析,测试`===''`vs`.length`并没有显示出任何明显的改进(并且使用`.length`只有在你可以假设你有一个字符串时才有效)
需要注意的是,如果您对"空字符串"的定义包含空格,则此解决方案不合适.一个包含1个或多个空格的字符串返回true.如果你正在使用JQuery,你可以简单地使用它:if($ .trim(ref).length === 0) - 根据类似问题的答案:http://stackoverflow.com/questions/2031085/how-可以,我检查,如果字符串 - 包含的字符空白 - 不只是空白/ 6610847#6610847

2> 小智..:

为了检查字符串是否为空,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());
};


@Vincent条件通常写成`if(variable == constant value)`,如果忘记'=',那么你将常量值赋给变量而不是测试.代码仍然有效,因为您可以在if中分配变量.因此,编写此条件的更安全方法是反转常量值和变量.这样,当您测试代码时,您将看到错误(分配中的无效左侧).你也可以使用像JSHint这样的东西来禁止在条件中进行赋值,并在你编写条件时发出警告.
为什么0 === str.length而不是str.length === 0?
@Vincent这也被称为"尤达条件",就像`如果蓝色是天空`.见http://www.dodgycoder.net/2011/11/yoda-conditions-pokemon-exception.html
/^\s*$/.test(str)可以替换为str.trim().length === 0
遗憾的是`/ ^\s*$/.test(str)`不是真的可读 - 可能使用更简单的代码或正则表达式删除空格会更好吗?请参阅http://stackoverflow.com/questions/6623231/remove-all-white-spaces-from-text以及http://stackoverflow.com/questions/10800355/remove-whitespaces-inside-a-string-in- JavaScript的

3> 小智..:

以上所有都很好,但这会更好.使用!!(而不是)运营商.

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

或使用类型转换:

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

两者都执行相同的功能,将变量类型转换为boolean,其中str是变量.
返回falsenull,undefined,0,000,"",false.
返回true字符串"0"和空格"".


为什么这"更好"?
`if(str)`和`if(!! str)`的行为有什么区别吗?
这是我一直使用的解决方案.`!! str.trim()`以确保字符串不仅仅由空格组成.
@PeterOlson如果你试图将变量保存为检查多个字符串内容的布尔值那么你会想要这样做..又名`var any =(!! str1 && !! str2 && !! str3)`处理如果有的话也是一个数字
看起来不像黑客,`布尔(str)`更具可读性,更少"重要".
请注意,`!!`不是运算符.它是一个应用两次的运算符.

4> Sugendran..:

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

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


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

5> Ates Goral..:

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

if (!str.length) { ...


那不是抛出异常是str为null吗?
@PicMickael是的!str.Empty也是如此。

6> 小智..:

我用 :

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


该解决方案更加语言无关.它依赖的唯一JavaScript功能是typeof.因此,当您不信任不同浏览器中的实现并且没有时间来获取更好的解决方案时,它就是您可以使用的解决方案的一个很好的示例.(IE,没有互联网接入).这就像一个证据.不是最干净的,但你可以肯定它会在不了解JavaScript的情况下发挥作用.

7> cllpse..:
var s; // undefined
var s = ""; // ""
s.length // 0

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



8> 小智..:

尝试:

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


长度属性是否必要?

9> T.Todua..:

功能:

function is_empty(x)
{
   return ( 
        (typeof x == 'undefined')
                    ||
        (x == null) 
                    ||
        (x == false)  //same as: !x
                    ||
        (x.length == 0)
                    ||
        (x == "")
                    ||
        (x.replace(/\s/g,"") == "")
                    ||
        (!/[^\s]/.test(x))
                    ||
        (/^\s*$/.test(x))
  );
}

ps在Javascript中,不要在使用Line-Break之后return;


-1他们正在测试不同的东西.将它们全部放入一个`if`语句是没有意义的.

10> Moshii..:

您可以使用lodash:_. isEmpty(value).

它涵盖了很多类似的情况下{},'',null,undefined等.

但它总是返回trueNumber类型的Javascript基本数据类型一样_.isEmpty(10)_.isEmpty(Number.MAX_VALUE)两者的回报true.



11> Chris Noe..:

我不会太担心最有效的方法.使用最明确的意图.通常对我来说strVar == "".

编辑:根据Constantin的评论,如果strVar可能会有一些结果包含整数0值,那么这确实是那些意图澄清情况之一.


馊主意.如果strVar被意外分配0,你会得到真的.
我同意明确表达你的意图比其他方法可能产生的任何微优化更重要,但使用[严格比较运算符](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference)/Operators/Comparison_Operators#Identity)`===`会更好.如果`strVar`是一个空字符串,它只返回true.
@ValentinHeinitz如果str被赋值为0或"0",if(str)将错误地报告为true.最好的方法是if(str ==="").它很简单,永远不会失败.

12> 小智..:

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

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

检查空字符串或用空格填充的字符串.



13> tfont..:

很多答案,以及很多不同的可能性!

毫无疑问,快速和简单的实施赢家是: if (!str.length) {...}

但是,正如许多其他例子一样.最好的功能方法,我建议:

function empty(str)
{
    if (typeof str == 'undefined' || !str || str.length === 0 || str === "" || !/[^\s]/.test(str) || /^\s*$/.test(str) || str.replace(/\s/g,"") === "")
    {
        return true;
    }
    else
    {
        return false;
    }
}


14> 小智..:

    检查是否var a;存在

    修剪出false spaces值,然后测试emptiness

    if ((a)&&(a.trim()!=''))
    {
      // if variable a is not empty do this 
    }
    



15> 小智..:

此外,如果您将填充空格的字符串视为"空".您可以使用此正则表达式进行测试:

!/\S/.test(string); // Returns true if blank.



16> user2086641..:

我经常使用这样的东西,

if (!str.length) {
//do some thing
}


如果您知道变量是字符串,则最快.如果变量未定义,则会引发错误.
@AbimaelMartell为什么不呢?您有一个变量,您声明的变量或从您无法控制的某个范围传递给您的变量,例如来自方法或API调用的响应.您可以假设它包含一个值并使用上面的检查,但如果它未定义或为null,则会出现错误.var test = null; if(!test.length){alert("adrian is wrong");}

17> Bikush..:

我没有注意到一个考虑到字符串中空字符可能性的答案.例如,如果我们有一个空字符串:

var y = "\0"; // an empty string, but has a null character
(y === "") // false, testing against an empty string does not work
(y.length === 0) // false
(y) // true, this is also not expected
(y.match(/^[\s]*$/)) // false, again not wanted

要测试其null,可以执行以下操作:

String.prototype.isNull = function(){ 
  return Boolean(this.match(/^[\0]*$/)); 
}
...
"\0".isNull() // true

它适用于空字符串,并且在空字符串上,并且可以访问所有字符串.此外,它可以扩展为包含其他JavaScript空或空白字符(即不间断空格,字节顺序标记,行/段分隔符等).


有趣的分析.我不认为这与99.9%的案件有关.但我最近发现,如果(并且仅当)该列包含空字符("\ 0"),MySQL会将列计算为"null".另一方面,Oracle不会将"\ 0"评估为null,而是将其视为长度为1的字符串(其中一个字符为空字符).如果处理不当,这可能会引起混淆,因为许多Web开发人员确实使用后端数据库,后端数据库可能会传递不同类型的"null"值.它应该落在每个开发人员的脑海中.

18> Andron..:

所有这些答案都很好.

但我不能确定变量是一个字符串,不包含空格(这对我来说很重要),并且可以包含'0'(字符串).

我的版本:

function empty(str){
    return !str || !/[^\s]+/.test(str);
}

empty(null); // true
empty(0); // true
empty(7); // false
empty(""); // true
empty("0"); // false
empty("  "); // true

关于jsfiddle的示例.



19> Josef.B..:

如果一个人不仅需要检测空字符串而且还需要空白字符串,我将添加Goral的答案:

function isEmpty(s){
    return !s.length;    
}

function isBlank(s){
    return isEmpty(s.trim());    
}



20> Imran..:

同时我们可以使用一个函数来检查所有'空,',如null,undefined,'','',{},[].所以我写了这个.

var isEmpty = function(data) {
    if(typeof(data) === 'object'){
        if(JSON.stringify(data) === '{}' || JSON.stringify(data) === '[]'){
            return true;
        }else if(!data){
            return true;
        }
        return false;
    }else if(typeof(data) === 'string'){
        if(!data.trim()){
            return true;
        }
        return false;
    }else if(typeof(data) === 'undefined'){
        return true;
    }else{
        return false;
    }
}

用例和结果.

console.log(isEmpty()); // true
console.log(isEmpty(null)); // true
console.log(isEmpty('')); // true
console.log(isEmpty('  ')); // true
console.log(isEmpty(undefined)); // true
console.log(isEmpty({})); // true
console.log(isEmpty([])); // true
console.log(isEmpty(0)); // false
console.log(isEmpty('Hey')); // false



21> 小智..:

我经常使用类似的东西:

if (str == "") {
     //Do Something
}
else {
     //Do Something Else
}



22> 小智..:

试试这个

str.value.length == 0


`“” .value.length`将导致错误。它应该是`str.length === 0`

23> Will..:

我使用组合,最快的检查是第一次.

function isBlank(pString){
    if (!pString || pString.length == 0) {
        return true;
    }
    // checks for a non-white space character 
    // which I think [citation needed] is faster 
    // than removing all the whitespace and checking 
    // against an empty string
    return !/[^\s]+/.test(pString);
}


只是想知道您是否可以解释何时需要进行长度检查?!pString不会捕获任何为空/空字符串的东西吗?这似乎有效。var test =''; if(!test)alert('empty');

24> mricci..:

忽略空白字符串,您可以使用它来检查null,empty和undefined:

var obj = {};
(!!obj.str) //returns false

obj.str = "";
(!!obj.str) //returns false

obj.str = null;
(!!obj.str) //returns false

简洁,它适用于未定义的属性,虽然它不是最易读的.



25> 小智..:

我做了一些研究,如果将非字符串和非空/空值传递给测试器函数会发生什么.众所周知,(0 =="")在javascript中是正确的,但由于0是一个值而不是空或null,您可能想要测试它.

以下两个函数仅对undefined,null,empty/whitespace值返回true,对其他所有值返回false,如数字,布尔值,对象,表达式等.

function IsNullOrEmpty(value)
{
    return (value == null || value === "");
}
function IsNullOrWhiteSpace(value)
{
    return (value == null || !/\S/.test(value));
}

存在更复杂的例子,但这些例子很简单并且给出了一致的结果.没有必要测试undefined,因为它包含在(value == null)检查中.您也可以通过将它们添加到String来模仿C#行为,如下所示:

String.IsNullOrEmpty = function (value) { ... }

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

String.prototype.IsNullOrEmpty = function (value) { ... }
var myvar = null;
if (1 == 2) { myvar = "OK"; } // could be set
myvar.IsNullOrEmpty(); // throws error

我测试了以下值数组.如果有疑问,你可以循环测试你的功能.

// Helper items
var MyClass = function (b) { this.a = "Hello World!"; this.b = b; };
MyClass.prototype.hello = function () { if (this.b == null) { alert(this.a); } else { alert(this.b); } };
var z;
var arr = [
// 0: Explanation for printing, 1: actual value
    ['undefined', undefined],
    ['(var) z', z],
    ['null', null],
    ['empty', ''],
    ['space', ' '],
    ['tab', '\t'],
    ['newline', '\n'],
    ['carriage return', '\r'],
    ['"\\r\\n"', '\r\n'],
    ['"\\n\\r"', '\n\r'],
    ['" \\t \\n "', ' \t \n '],
    ['" txt \\t test \\n"', ' txt \t test \n'],
    ['"txt"', "txt"],
    ['"undefined"', 'undefined'],
    ['"null"', 'null'],
    ['"0"', '0'],
    ['"1"', '1'],
    ['"1.5"', '1.5'],
    ['"1,5"', '1,5'], // valid number in some locales, not in js
    ['comma', ','],
    ['dot', '.'],
    ['".5"', '.5'],
    ['0', 0],
    ['0.0', 0.0],
    ['1', 1],
    ['1.5', 1.5],
    ['NaN', NaN],
    ['/\S/', /\S/],
    ['true', true],
    ['false', false],
    ['function, returns true', function () { return true; } ],
    ['function, returns false', function () { return false; } ],
    ['function, returns null', function () { return null; } ],
    ['function, returns string', function () { return "test"; } ],
    ['function, returns undefined', function () { } ],
    ['MyClass', MyClass],
    ['new MyClass', new MyClass()],
    ['empty object', {}],
    ['non-empty object', { a: "a", match: "bogus", test: "bogus"}],
    ['object with toString: string', { a: "a", match: "bogus", test: "bogus", toString: function () { return "test"; } }],
    ['object with toString: null', { a: "a", match: "bogus", test: "bogus", toString: function () { return null; } }]
];



26> Luca C...:

检查是否完全是一个空字符串:

if(val==="")...

检查它是否为空字符串或无值的逻辑等效项(null,undefined,0,NaN,false,...):

if(!val)...



27> Alireza..:

您可以轻松地将其添加到JavaScript中的本机String对象中,并一遍又一遍地重复使用... 如果您想检查空字符串,则像下面的代码这样简单的事情就可以为您完成这项工作:
''

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

否则,如果您想同时检查''空字符串和' '空格,则只需添加即可trim(),例如下面的代码:

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

您可以这样称呼:

''.isEmpty(); //return true
'alireza'.isEmpty(); //return false



28> Harshit Agar..:

到目前为止,还没有像string.empty这样的直接方法来检查字符串是否为空。但是在您的代码中,您可以使用包装器检查是否为空字符串,例如:

// considering the variable in which your string is saved is named str.

if (str && str.length>0) { 

  // Your code here which you want to run if the string is not empty.

}

使用此方法,您还可以确保字符串也未定义或为null。记住,未定义,null和empty是三件事。



29> 小智..:

尝试这个:

export const isEmpty = string => (!string || !string.length);



30> Agustí Sánch..:

没有isEmpty()方法,你必须检查类型和长度:

if (typeof test === 'string' && test.length === 0){
  ...

类型检查是必要的,以避免运行时错误时testundefinednull.



31> Kev..:

不要假设您检查的变量是字符串.不要假设如果这个var有一个长度,那么它就是一个字符串.

问题是:仔细考虑您的应用必须做什么并且可以接受的内容.建立强大的东西.

如果你的方法/函数只应处理非空字符串,那么测试参数是否为非空字符串并且不做"技巧".

作为一个例子,如果你在这里不小心遵循一些建议会爆炸.

var getLastChar = function (str) {
 if (str.length > 0)
   return str.charAt(str.length - 1)
}

getLastChar('hello')
=> "o"

getLastChar([0,1,2,3])
=> TypeError: Object [object Array] has no method 'charAt'

所以,我坚持下去

if (myVar === '')
  ...



32> 小智..:

我在这里看不到好的答案(至少不是一个适合我的答案),所以我决定自己回答:

value === undefined || value === null || value === "";

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

你不能拥有!或仅if(value) 当您检查后才0会给您一个错误的答案(0为错误)

这么说,用下面的方法包装它:

public static isEmpty(value: any): boolean { return value === undefined || value === null || value === ""; }

PS。您不需要检查typeof,因为它甚至在进入方法之前都会爆炸。

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有