1

为什么我要问

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

我需要什么帮助

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

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

4 回答 4

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);
于 2012-06-07T23:05:25.510 回答
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()返回。

于 2012-06-07T23:05:45.227 回答
0

或者:

var msgfuncs = [ hey, hello ];
function welcommessage() { msgfuncs[br](); }

(假设当“br”不是 1 时它是 0,这当然可能是一个无效的假设。)

如果选择不同的函数,直接把数组放在周围的函数中即可:

function welcomemessage() {
  [ hey, hello ][br]();
}

如果您想做出决定并保存函数以供以后调用,您可以这样做:

var messageFunction = [ hey, hello ][ br ];

然后任何时候:

messageFunction();
于 2012-06-07T23:08:51.690 回答
0

如果br总是数字,xbonez 的答案可以通过使用严格比较来优化一点===(因为它快一点):

function welcomemessage() {
    (br === 1) ? hello() : hey();
}

另一个有趣的选择是:

function welcomemessage() {
    (br - 1) ? hey() : hello();
}

最后一个函数有效,因为当bris时1,它将变为0(这是一个假值)并评估为假,触发hello(),其余的它将触发hey()

于 2012-06-07T23:30:41.443 回答