句子的简写

时间:2012-06-07 23:04:21

标签: javascript optimization shorthand

为什么我要问

我在理解JavaScript中的if句子的简写方面遇到了很多麻烦,而且我还没有找到一篇描述它的文章或教程。这就是为什么我被困在优化我的小代码。我是JavaScript新手,所以如果有人能够让我对这段代码的缩短有基本的了解,我非常感谢你告诉我代码背后的魔力。

我需要帮助

我将在很多函数中使用完全相同的代码。因此,我想优化它并使其成为更短版本的代码。

function welcomemessage() {
if (br == 1) {
hello();
}
else {
hey();
}
}

4 个答案:

答案 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();
}

这最后一个函数有效,因为当br1时,它将转为0(这是一个假值)并评估为false,触发hello(),并且对于其余部分,它将触发hey()