由于数据错误,Javascript if语句需要重构
由于数据库中的错误数据,Javascript if语句需要重构 我想要一个更好的方法来做这个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
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))
完全相同,但没有函数调用。它(主观上)更为惯用。