Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
由于数据错误,Javascript if语句需要重构_Javascript - Fatal编程技术网

由于数据错误,Javascript if语句需要重构

由于数据错误,Javascript if语句需要重构,javascript,Javascript,由于数据库中的错误数据,Javascript if语句需要重构 我想要一个更好的方法来做这个if语句: if (typeof value === undefined || value === null || value === "" || value === 0) { return false; } 有较短的路吗 我期待着您的建议。您甚至可以这样做: return Boolean(value); if (!value || !value.length) { return fals

由于数据库中的错误数据,Javascript if语句需要重构

我想要一个更好的方法来做这个if语句:

if (typeof value === undefined || value === null || value === "" || value === 0) {
   return false;
}
有较短的路吗


我期待着您的建议。

您甚至可以这样做:

return Boolean(value);
if (!value || !value.length) {
   return false;
}
有较短的路吗

只有一点点:

if (value == null || value === "" || value === 0) {
…因为
未定义
null
都是
==null
(其他都是)

或者,在ES2015中,您可以使用要筛选的值的
集合

let badValues = new Set([undefined, null, "", 0]);
然后

如果您也乐于过滤掉
false
NaN
,那么您可以使用

if (!value) { // Does more values than your question asks for, see note above


请注意,您的第一个条件是错误的:如果使用
typeof value
,则
undefined
必须在引号中,因为
typeof
始终返回字符串。

Javascript会在If语句中自动转换为布尔型其他变量类型,您可以执行以下操作:

return Boolean(value);
if (!value || !value.length) {
   return false;
}
undefined、null和0被转换为“false”,同时使用.length,如果它是0,则仍然有false,否则另一个数字将为true

干杯

编辑

为了避免将对象{length:0}解析为空,可以添加:

if (!value || ((value instanceof Array || typeof value === 'string') && !value.length)) {
   return false;
}
请注意:

!!null === false
!!"" === false
!!0 === false
!!undefined === false
你可以写:

if (!value || !value.length) {return false}
证明->

    console.log(!undefined, !null, !"", !0);
    returns -> true true true true

    console.log(!100, !"hello", !"0", !"false", !"true");
    returns -> false false false false false

如果(!value){…}
,也包括
false
,但是。
typeof value===undefined
永远不会为真。
typeof
操作符总是返回一个字符串,它永远不会被未定义。甚至
return(value)
将返回
false
,用于OP没有表示想要的值(
NaN
false
)。对于布尔值(value),如果值为null,它将返回false,如果字符串为true?@AngularM:
Boolean(value)
对于
false
将返回
false
null
未定义的
NaN
0
(“falsy”值)和
true
对于其他所有内容。是的,您可以很容易地在开发人员工具中进行测试——但请注意T.J.Crowder的评论——如果您不想过滤掉
false
s和
NaN
,那么最好使用它们的suggestion@AngularM:是的。但是函数调用完全没有理由
if(!value)
将过滤掉伪值。当然,这也会过滤掉
{length:0}
(具有
length
属性且值为
0
[或者实际上是任何其他伪值]的对象).我编辑了答案,但是数据太脏,不可预测,也许他的解决方案是最好的,除了
typeof value==“未定义”
,其中未定义的应该是字符串。类型脚本不喜欢设置,所以我不得不使用布尔值approach@AngularM:如果您使用ES2015接口定义,则TypeScript对
Set
非常满意。您不必使用
Boolean
方法,请同时查看上述三个选项中的第一个和最后一个。
Boolean
方法有效(前提是你确实想过滤掉
NaN
false
,这是你在问题中没有说的你想做的)。值是否适合未定义的null 0和空字符串?@AngularM:是的,这就是我说“也是”的原因当您使用一个值作为布尔值时,它被强制为布尔值,就像
布尔值
强制一样。因此
未定义
0
NaN
(“假”值)所有结果都是
false
,其他所有结果都是
true
。因此
if(value)
将进入
if
块(如果该值不是其中一个伪值),而
if(!value)
将进入
if
块(如果它是其中一个伪值)。
if(value)
if(Boolean(value))
完全相同,但没有函数调用。它(主观上)更为惯用。