检查字符串是否为零、零、空字符串或null。

11

在 PHP 中:

$var=0;
$var="";
$var="0";
$var=NULL;

验证$var是否为0或"0"或""或NULL

if (!$var) {...}

在 jQuery / JavaScript 中:

$var=0;
$var="";
$var="0";
$var=NULL;

if (!$var)可以用于除了"0"之外的所有值。

是否有一种JavaScript/jQuery的通用方法,可以像php一样检查所有类型的空/ null /零值?


不要依赖于这些令人困惑的类型转换。使用 === 进行明确严格的检查。 - dfsq
如果字符串不为空,但只包含空格字符怎么办?如果包括这些字符,则可以将值转换为数字。所有这些都将最终变成 0... if (+my_var === 0) { - six fingered man
如果这确实是您的情况,为什么不检查!value || value == '0'呢? - Andreas Louv
6个回答

8

在JavaScript/jQuery中,是否有一种通用的方法来检查所有类型(空/Null/零)的值,就像php一样?

没有。在PHP中,转换为布尔值的值产生的结果与JavaScript不同。因此,您无法完全像PHP那样做。

为什么不明确些呢,这会使您的代码更易于理解?

// falsy value (null, undefined, 0, "", false, NaN) OR "0"
if (!val || val === '0') { }

我最初回答的是!+v,但反过来就不可靠了:示例 - Roko C. Buljan
Felix:根据你的回答,函数 is_empty(myvar) 的代码如下:{var res=false; if (!myvar || myvar==='0') res=true; return res;} - ihtus
1
这个使用 === 的解决方案覆盖不足。如果 val = "00",它会返回 true 而不是 false。 - Tomas M

6

使用Number(variable)可以得到预期的输出结果。

Number(0) = 0
Number("0") = 0
Number("") = 0
Number(null) = 0
Number(false) = 0

4

根据表11,抽象操作ToBoolean将其参数转换为布尔类型的值:

Undefined false
Null false
Boolean 结果等于输入参数(不进行转换)。
Number 如果参数是+0、-0或NaN,则结果为false;否则结果为true。
String 如果参数是空字符串(长度为零),则结果为false;否则结果为true。
Object true

当参数为0时,返回false。

http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf


谢谢,我注意到了,但是我正在寻找一种像 PHP 一样在 JS 中通用的检查方法。 - ihtus
1
the way you did in php. - Alex Char

3
如果您感到有些奇怪(与您的具体情况示例相同),可以这样做:
(否则,将得到false作为undefinedNaN的结果)
+v===0

例子:

var a = [0, "",  "0", null];
var b = [1, "a", "1", {}];

a.forEach(function(v){
  console.log( +v===0 ); // true, true, true, true
});

b.forEach(function(v){
  console.log( +v===0 ); // false, false, false, false
});

1

首先,"0"不是假的,而是真的。因为'0'是一个字符串。如果字符串存在,则返回true。因此,!""应该返回false。也就是说,如果您的数据将零作为字符串返回,则可以使用:

parseInt("0", 10);

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt

这将返回整数值或NaN。 !NaN将返回true,如果它是一个数字,比如... 0,它将返回!0,所以你可以这样做:
function nullOrEmpty(value) {
    return (!value && !parseInt(value));
}

parseInt而不是Parse.Int - Andreas Louv
"如果字符串存在则返回true。因此!""应该返回false"。这是不正确的。!""返回true - Felix Kling

0

你完全可以使用双重否定。

var test = 0;
console.log(!!test);

var test = "";
console.log(!!test);

var test = "0";
console.log(!!test);

var test = null;
console.log(!!test);

虽然"0"不是一个空字符串,所以它的值为真,但其他的则为假。
另外,我同意dfsq在评论中所说的,你不应该依赖这一点。你应该知道并理解你的变量所持有的类型。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接