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

问题描述 投票:2471回答:41

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

javascript null is-empty
41个回答
3130
投票

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

if (strValue) {
    //do something
}

如果你需要专门检查空字符串是否超过null,我认为使用""检查the === operator是你最好的选择(这样你就知道它实际上是你正在比较的字符串)。

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

27
投票

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

它涵盖了很多案例,如{}''nullundefined等。

但它总是返回trueNumber类型的Javascript Primitive Data Types_.isEmpty(10)_.isEmpty(Number.MAX_VALUE)都返回true


26
投票

我不会太担心最有效的方法。使用最明确的意图。对我而言,通常是strVar == ""

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


19
投票

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

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

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


17
投票

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

毫无疑问,快速和简单的实施赢家是: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;
    }
}

我知道,有点过分了。


16
投票
  1. 检查var a;是否存在
  2. 在值中删除false spaces,然后测试emptiness if ((a)&&(a.trim()!='')) { // if variable a is not empty do this }

14
投票

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

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

11
投票

我经常使用这样的东西,

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

9
投票

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

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空或空白字符(即不间断空格,字节顺序标记,行/段分隔符等)。


9
投票

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

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

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

8
投票

所有这些答案都很好。

但我不能确定变量是一个字符串,不包含空格(这对我来说很重要),并且可以包含'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的样本。


1008
投票

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

7
投票

我经常使用类似的东西:

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

7
投票

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

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);
}

7
投票

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

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

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

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

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


7
投票

我做了一些研究,如果将非字符串和非空/空值传递给测试器函数会发生什么。众所周知,(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; } }]
];

7
投票

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

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

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

if(!val)...

7
投票

同时我们可以使用一个函数来检查所有'空,',如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

6
投票

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

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

testundefinednull时,需要进行类型检查以避免运行时错误。


5
投票

不要假设您检查的变量是字符串。不要假设如果这个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 === '')
  ...


5
投票

试试这个

str.value.length == 0

5
投票

您可以轻松地将其添加到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

258
投票

以上所有都很好,但这会更好。使用!!(不是)运算符。

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

或使用类型转换:

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

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


4
投票
function tell()
{
var pass = document.getElementById('pasword').value;
var plen = pass.length;

now you can check if your string is empty as like 
if(plen==0)
{
         alert('empty');
}
else
{
   alert('you entered something');
}
}


<input type='text' id='pasword' />

这也是检查字段是否为空的通用方法。


95
投票

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

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

89
投票

你可以得到str.Empty最接近的事情(前提是str是一个字符串)是:

if (!str.length) { ...

54
投票

我用 :

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

31
投票

尝试:

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

31
投票

功能:

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))
  );
}

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


28
投票
var s; // undefined
var s = ""; // ""
s.length // 0

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

© www.soinside.com 2019 - 2024. All rights reserved.