【问题标题】:Shorthand for if sentenceif 语句的简写
【发布时间】:2012-06-13 12:29:59
【问题描述】:

我为什么要问

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

我需要什么帮助

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

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

【问题讨论】:

    标签: javascript optimization shorthand


    【解决方案1】:

    使用三元运算符。

    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);
    

    【讨论】:

    • 有没有办法只调用它以供将来参考。我在每个函数中一直使用br 变量。我唯一要更改的是hello();hey();
    • 我还可以在调用中添加一个数组。 (一个非常大的)
    • 嗯。在其中添加两件事时,我似乎不起作用。一个数组和一个函数调用。
    • 它不适用于数组,因为执行array == 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()

    【讨论】:

    • 如果br 是2,这将错误地调用hello()。否则我可能错了。 JS 铸造令人困惑
    • 好吧,我假设只有两个选择。
    • 因此,我可以将其称为变量,因为我假设我只会使用这两个值。比如 var something = ((br == 1) ? hello() : hey();)
    • something 将是 hello()hey() 返回的值。
    • 做一个这样的变量; var check = br ? hello(); : hey(); 并称之为:if(check==1) {hello();} if(check==2) {hey();}
    【解决方案3】:

    或者:

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

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

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

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

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

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

    那么以后的任何时间:

    messageFunction();
    

    【讨论】:

    • 有没有办法通过缩短创建一个变量然后调用它?如果是这样,我该怎么做?
    • 我不确定我是否完全理解你,但我会补充我的答案。
    【解决方案4】:

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

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

    另一个有趣的选择是:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-18
      • 2012-04-09
      • 2019-04-16
      • 2013-08-08
      • 1970-01-01
      • 2012-02-12
      • 2021-01-26
      • 1970-01-01
      相关资源
      最近更新 更多