你如何检查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; } }
- 检查
var a;
存在 -
修剪值的
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
等情况