javascript - 在 if 条件下定义和使用函数
问题描述
我需要一个 if 语句,其中条件取决于 try-catch 是否成功。定义一个新函数只是为了调用它一次是浪费空间,我宁愿找出一个单行。
我不能使用if (try{return true;}catch{return false;})
,因为它会导致 SyntaxError。因此,将“return false”视为“失败的 try-catch 尝试”。
这是尽可能短的,我可以让它在它仍然有效的地方。
// [WORKING] False as expected
if ((() => {return false})()){
console.log("Condition is true");
}
else{console.log("Condition is false");}
这对我来说很有意义,但我认为这不是最“官方”的方式。这种方式是一个好的解决方案吗?有没有更好的办法?
这对我有意义的原因是因为我正在检查变量是否存在,是否为数字类型并且大于 0。
if ((() => {try{return price > 0}catch{return false}})())
解决方案
问题if (try {return true;} catch {return false;})
在于您试图return
在函数之外使用;那里没有任何意义。
正如所有评论指出的那样,您可以按照第二个块的建议进行操作,这可能是获得这种行为的唯一合理方法。但是,正如评论所指出的,这几乎没有意义。如果它足够小以适合典型 - 条件内的单行if
,那么它可能只是一个表达式,在这种情况下,您不妨只使用该表达式作为您的条件。
也就是说,而不是
if ((() => doSomething('with', 'my data'))()) {
//...
} else
// ...
}
你不妨写
if (doSomething('with', 'my data')) {
// ...
} else
// ...
}
if
如果它不是单个表达式,那么将它放在命名函数中并在您的-condition中调用它会更有意义。
这不会施加额外的惩罚。该功能,无论是在您的条件下还是在它之外,都将占用相同数量的内存;当前范围结束时,它将有资格进行垃圾收集。(我想条件中的那个可能会更早符合条件;但我不会指望它;这当然不足以值得增加代码的复杂性。)
换句话说,这:
const myFunc = (some, args) => {
const step1 = doSomething('with' args);
const step2 = doAnotherThing('with', step1, 'and', some, args);
return doAThirdThing('with', step2)
}
if (myFunc('my', 'data')) {
//...
} else {
// ...
}
比
if (((some, args) => {
const step1 = doSomething('with' args);
const step2 = doAnotherThing('with', step1, 'and', some, args);
return doAThirdThing('with', step2)
})('my', 'data')) {
//...
} else {
// ...
}
我向你保证,你以后会感谢自己没有做后者。
推荐阅读
- sql - 当三个字段中的至少一个不为空时,SQL 查询包含行
- python - Python BeautifulSoup 获取图像 src 的 KeyError
- c# - 文件上传到 C# .Net Core API
- javascript - 如何从 Axios 获取数组数据以将其转换为字符串?
- tableau-api - Tableau Prep Builder 连接到本地 SQL 数据库
- c++ - 最优 FSM 模式的使用
- android - 我可以在 Android 上使用 tensorflow/tflite 运行张量操作吗?
- javascript - 续集“对象”没有增量功能
- javascript - 一个非常简单的 d3 数据连接将新元素添加到错误的位置
- android - 我用两个按钮创建了我的自定义来电屏幕。如何让按钮接听并结束通话?