为什么我要问
我在理解JavaScript中的if
句子的简写方面遇到了很多麻烦,而且我还没有找到一篇描述它的文章或教程。这就是为什么我被困在优化我的小代码。我是JavaScript新手,所以如果有人能够让我对这段代码的缩短有基本的了解,我非常感谢你告诉我代码背后的魔力。
我需要帮助
我将在很多函数中使用完全相同的代码。因此,我想优化它并使其成为更短版本的代码。
function welcomemessage() {
if (br == 1) {
hello();
}
else {
hey();
}
}
答案 0 :(得分:6)
使用三元运算符。
function welcomemessage() {
(br == 1) ? hello() : hey();
}
三元运算符非常有用,并且不难理解。这是它的工作原理。
(condition) ? (true) : (false)
编辑:
由于JS将函数视为第一类对象,因此可以创建包装器。像下面的东西(虽然没有经过测试)
function ternaryWrapper(br, functionTrue, functionFalse){
return (br == 1) ? functionTrue : functionFalse;
}
//call it
ternaryWrapper(2,hello, hey);
答案 1 :(得分:2)
更短:
function welcomemessage(br){
[hello,hey][br-1](); //This will work.
}
welcomemessage(1); //hello();
welcomemessage(2); //hey();
有趣的事实: 1
要让其他人难以阅读您的脚本,请按以下步骤操作:
function welcomemessage(){
return br==1 && (hello(),1) || (hey(),1); //This will work too.
}
1 完全与答案无关。
var something = ( (br == 1) ? hello() : hey() );
something
将返回值hello()
或hey()
。
答案 2 :(得分:0)
或者:
var msgfuncs = [ hey, hello ];
function welcommessage() { msgfuncs[br](); }
(假设当“br”不是1时它为0,这当然可能是无效的假设。)
如果选择使用不同的函数,只需将数组直接放在周围的函数中:
function welcomemessage() {
[ hey, hello ][br]();
}
如果您想做出决定并保存以后调用的功能,您可以这样做:
var messageFunction = [ hey, hello ][ br ];
然后任何时候:
messageFunction();
答案 3 :(得分:0)
如果br
始终是数字,则可以通过使用严格比较===
来优化xbonez答案(因为它更快一点):
function welcomemessage() {
(br === 1) ? hello() : hey();
}
另一个有趣的选择是:
function welcomemessage() {
(br - 1) ? hey() : hello();
}
这最后一个函数有效,因为当br
为1
时,它将转为0
(这是一个假值)并评估为false,触发hello()
,并且对于其余部分,它将触发hey()