【问题标题】:predefine what type of variable i'm making预定义我正在制作的变量类型
【发布时间】:2011-06-03 23:44:30
【问题描述】:

我敢打赌,通过从jc.half = jc.half(); 中删除部分,以下情况会更有效。我只是不太确定如何。

jc.half = function(){

    if(jc.singlerow){
        return jc.total
    }else{
        return jc.total / 2;
    }

}
// returns function()

jc.half = jc.half();
// returns the right integer

我正在寻找这样的解决方案:

jc.half = returnInteger(function(){

    if(jc.singlerow){
        return jc.total
    }else{
        return jc.total / 2;
    }

})
// returns the right integer

【问题讨论】:

    标签: javascript variables integer


    【解决方案1】:
    jc.half = (function() {
      return jc.singlerow ? jc.total : jc.total / 2;
    })();
    

    诀窍在于,当你有一个函数声明时,开始 解析器可以判断它是表达式中的 ,那么函数定义表达式的一部分,你可以这样使用它并调用函数。真的,在这样的作业的右侧,甚至没有必要使用“包装”括号,但我这样做只是出于习惯并在阅读代码时让自己清楚。

    当然在这个的情况下你可以完全省略这个函数。

    jc.half = jc.singlerow ? jc.total : jc.total / 2;
    

    edit — 一位乐于助人的评论者指出您提到您需要一个整数;如果是这样,您需要在结果上调用Math.floor()Math.round()。或者你可以“欺骗”一点然后这样做:

    jc.half = ~~(jc.singlerow ? jc.total : jc.total / 2);
    

    【讨论】:

    • 需要一个整数响应,在该除法周围添加Math.floor
    • 感谢您富有洞察力的解释。
    【解决方案2】:

    这不是获取正确类型的问题...您定义了函数,但没有执行它!你可以让它自动执行:

    jc.half = (function(){
    
        if(jc.singlerow){
            return jc.total
        }else{
            return jc.total / 2;
        }
    
    }) (); // Notice the empty brackets that actually execute the function
    

    虽然,有必要有这个功能吗?

    jc.half = jc.singlerow ? jc.total : jc.total /2;
    

    【讨论】:

      【解决方案3】:

      不清楚为什么需要函数。

      js.half = js.singlerow ? js.total : Math.floor(js.total/2);
      

      【讨论】:

      • 我不清楚我在看什么。你们都是用速记符号给我解决方案,还是解决方案速记符号?我无法弄清楚,因为我不熟悉这种符号。
      • ? 是三元运算符。可以写成if (js.singlerow) { js.half = js.total; } else { js.half = Math.floor(js.total/2); }
      猜你喜欢
      • 2016-11-27
      • 2017-10-08
      • 1970-01-01
      • 1970-01-01
      • 2023-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多