【问题标题】:declaring a variable within conditional expressions (ternary operator)在条件表达式中声明变量(三元运算符)
【发布时间】:2013-09-28 21:21:42
【问题描述】:

是否可以在条件表达式中声明变量?

例如: 下面的代码返回一个语法错误(因为我已经在条件表达式中声明了变量 x?)。

var a = document.getElementById("userData");
var d = a.value;
function() {
(d.length>15)?(
 alert("your input was too long")):(
 var x = parseInt(d).toString(2), 
 a.value=x 
 );
 }

显然这可以通过简单地在语句之外添加var x; 来解决,但是这里可以声明变量吗?

【问题讨论】:

  • ...你为什么要这样做?
  • 在这种情况下我会使用 if..else 并保持可读性。
  • 没有。那么像var a = (var b!=undefined) ? (var c=1) : (var d=2); 这样的东西是否合法
  • @delnan 老实说,只是好奇。除了将我的代码缩短一两个字符之外,我认为它没有任何好处。
  • @LiamB 您应该以可读性为目标,而不是简短。不必要的短代码通常太聪明,以至于下一个必须维护您的代码的人很容易理解。 (或者当你一个月后回到代码时,甚至是你自己。)

标签: javascript conditional-operator


【解决方案1】:

是否可以在条件表达式中声明变量?

没有。 var 是一个语句,conditional expression 的操作数是表达式。语言语法不允许。谢天谢地。

【讨论】:

    【解决方案2】:

    您可以使用立即调用的函数来做到这一点:

    (d.length>15)?(
        alert("your input was too long")):
        (function(){
            var x = parseInt(d).toString(2);
            a.value=x;
        }())
    );
    

    但请注意,x 变量不会存在于内部函数之外。 (我不知道你是否希望它在表达式被评估后存在。)

    【讨论】:

    • +1 是的。您可以(前提是您不需要表达式之外的变量),但您不应该这样做。 :-)
    • @T.J.Crowder 自调用函数表达式不是“疯子”,它是在 JavaScript 中创建新范围的基本方法,因为该语言没有块范围。在这种情况下,它服务于这个目的。 (在这种情况下“不应该”做的是使用三元运算符而不是适当的条件。)
    • @cdhowie:这本身并不疯狂,任何从事重要 JavaScript 工作的人都经常这样做。 这个 使用它会很疯狂。 :-) 当然,正如您正确指出的那样,该变量无论如何都不能在它之外使用。
    【解决方案3】:

    没有。但是你可以用undefined初始化它 并设置条件。

    function Test()
    {
        d = 25.6654;
        var x = (d.toString().length > 15) ? parseInt(d).toString() : undefined;
    
        alert(typeof x === "undefined");
    }
    

    然后你可以使用if(typeof x == "undefined") //do something

    【讨论】:

      猜你喜欢
      • 2019-02-10
      • 1970-01-01
      • 1970-01-01
      • 2020-03-30
      • 2016-04-15
      • 1970-01-01
      • 2014-09-15
      • 1970-01-01
      • 2012-07-03
      相关资源
      最近更新 更多