我只是想知道是否有更好的方法在Javascript中编写它(特别是删除if语句)。
that.conflicts_selected 是{text: "All Locations", value: "all"}
但是,有时候.conflicts_selected可以为null,这就是if语句的原因。
if (that.conflicts_selected) {
switch (that.conflicts_selected.value) {
case "all":
return true;
case "with":
return (someValue > 0)
case "without":
return (someValue === 0)
}
}
非常感谢任何帮助!
答案 0 :(得分:4)
您可以使用功能强大的&&
运算符:
switch (that.conflicts_selected && that.conflicts_selected.value) {
case "all":
return true;
case "with":
return (someValue > 0)
case "without":
return (someValue === 0)
}
that.conflicts_selected && that.conflicts_selected.value
的评估如下:
that.conflicts_selected
)
null
,undefined
,0
,""
,NaN
,或者当然,false
)整个&&
表达式将该值作为结果。that.conflicts_selected.value
)并{{1} } expression将其作为结果。这意味着它会在错误的情况下发生短路,因此如果&&
为that.conflicts_selected
,则在null
上尝试访问属性(value
)时不会出错{1}}(null
)。
评估that.conflicts_selected
值(switch
)后,会根据that.conflicts_selected && that.conflicts_selected.value
标签进行检查。与具有类似语法的其他语言不同,case
标签不必是常量,它们可以是表达式(尽管它们在此示例中是常量,但它们是字符串文字)。评估源代码顺序中的第一个case
标签,并使用严格(case
)比较将其结果与switch
值进行比较,如果匹配===
的陈述被执行;如果没有,则评估和比较下一个case
标签,等等。如果它们都不匹配且有case
,则执行其语句;如果没有default
,则default
'switch
中的语句不会被执行。
当你第一次开始使用JavaScript时,这看起来有些奇怪,但它是一个你很快习惯的成熟习惯。
答案 1 :(得分:1)
解决它的一种方法也很容易扩展,就是使用一个对象。
const valueEvaluators {
all: val => true,
with: val => val > 0,
without: val => val === 0
}
return that.conflicts_selected && valueEvaluators[that.conflicts_selected.value](someValue)