你如何检查JavaScript中的空string?

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

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

 if (strValue) { //do something } 

如果你需要特别检查一个空string是否超过null,我会认为使用===操作符来检查""是最好的select(所以你知道它实际上是一个你正在比较的string)。

为了检查一个string是否为空,空或未定义我使用:

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

为了检查一个string是否为空,null或undefined我使用:

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

为了检查一个string是空白的还是只包含空格:

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

以上都是好的,但这会更好。 使用!!不)没有操作员。

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

或使用types转换:

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

两者都做相同的function,types转换为布尔variables,其中str是一个variables。
对于null,undefined,0,000,"",false返回null,undefined,0,000,"",false
对string“0”和空格“”返回true

如果你需要确保string不只是一堆空的空间(我假设这是表单validation),你需要做的空间replace。

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

最接近你str.Empty(与str是一个string的前提条件)是:

 if (!str.length) { ... 

我用 :

 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 

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

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

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

JavaScript中没有任何内容代表空string。 对任一length进行检查(如果你知道var将始终是一个string)或反对""

尝试:

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

几种方法:

 //when undefined if (typeof MyVariable == 'undefined') //when false if (MyVariable == false) //same as if(!MyVariable ) //when defined, but empty if ( (MyVariable.length == 0) || (MyVariable == "") || (MyVariable.replace(/\s/g,"") == "") || (!/[^\s]/.test(MyVariable)) || (/^\s*$/.test(MyVariable)) ) 

你也可以去正则expression式:

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

检查空白或填充空白的string。

很多答案和很多不同的可能性!

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

但是,还有许多其他例子可用。 最好的function方法去这个,我会build议:

 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; } } 
  1. 检查var a; 存在
  2. 修剪值的false spaces ,然后testingemptiness

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

此外,如果你认为一个空白填充string为“空”。 你可以用这个正则expression式来testing它:

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

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

 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 

为了testing它的无效性,可以这样做:

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

它工作在一个空string,并在一个空string,它是所有string可访问。 另外,它可以扩展为包含其他JavaScript空白或空白字符(即不间断空格,字节顺序标记,行/段落分隔符等)。

如果不仅需要检测空白string,还需要添加Goral的答案:

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

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

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

忽略空白string,你可以用这个来检查null,empty和undefined:

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

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

所有这些答案都很好。

但我不能确定variables是一个string,不包含只有空格(这对我来说很重要),并可以包含'0'(string)。

我的版本:

 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上的示例 。

我做了一些研究,如果你传递一个非string和非空/空值到testing函数会发生什么。 很多人知道,(0 ==“”)在JavaScript中是true,但由于0是一个值,而不是空或空,你可能想testing它。

以下两个函数仅对未定义,空值,空白/空值的值返回true,对于其他值则为false,例如数字,布尔值,对象,expression式等。

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

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

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

你不想把它放在string原型中,因为如果String类的实例是空的,就会报错:

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

我testing了下面的值数组。 如果有疑问,你可以通过循环来testing你的function。

 // 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; } }] ]; 

我通常用这样的东西,

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

我通常使用像这样的东西:

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

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

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

test undefined或为null时,为了避免运行时错误,需要进行types检查。

 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' /> 

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

尝试这个

  str.value.length == 0 

不要以为你检查的variables是一个string。 不要认为如果这个var有一个长度,那么它是一个string。

事情是:仔细想想你的应用程序必须做什么,可以接受。 build立健全的东西。

如果你的方法/函数只处理一个非空string,那么testing这个参数是否是一个非空string,不要做一些“诡计”。

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

 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'
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 === '') ...
if (myVar === '') ... 

你也应该总是检查这个types,因为JavaScript是一个鸭子型的语言,所以你可能不知道在这个过程当中数据的改变时间和方式。 所以,这是更好的解决scheme:

 var str = ""; if (str === "") { //... } 

下划线JavaScript库http://underscorejs.org/提供了一个非常有用的;_.isEmpty()函数来检查空string和其他空对象。

参考: http : //underscorejs.org/#isEmpty

isEmpty _.isEmpty(object)
如果可枚举对象不包含任何值(不可枚举自己的属性),则返回true。 对于string和类似数组的对象_.isEmpty检查length属性是否为0。

_.isEmpty([1, 2, 3]);
=> false

_.isEmpty({});
=> true

其他非常有用的下划线function包括:
http://underscorejs.org/#isNull _.isNull(object)
http://underscorejs.org/#isUndefined _.isUndefined(value)
http://underscorejs.org/#has _.has(object, key)

检查是否完全是一个空string:

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

检查它是否是一个空string或一个无值的逻辑等价物(null,undefined,0,NaN,false,…):

 if(!val)... 

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

它涵盖了许多像{}''null等情况