【问题标题】:Shorthand for setting variable values设置变量值的简写
【发布时间】:2011-06-23 04:26:19
【问题描述】:

我正在尝试将 2 个变量声明为相同的值 (false)。

我倾向于在所有地方都这样做(例如,几乎在我原型的每个对象中)

var $a= {border:false
,frame:false};

或交替

border=false;frame=false;

有没有更好的方法可以同时声明两者的值? (例如代码高尔夫解决方案)

【问题讨论】:

    标签: javascript shorthand


    【解决方案1】:

    如果在设置值时声明了两个变量,则可以。这有点古怪,但确实有效:

    var frame, 
        border = frame = false;
    

    (我认为这是最短的)

    更好吗?我不这么认为,而且你并没有真正节省多少。更具可读性的是

    var frame = false, 
        border = false;
    

    实际上你可以做更多的组合,但你不能不重复变量名或值。例如。你也可以这样做:

    var frame = false, 
        border = frame;
    

    当然,这只适用于原始值(即布尔值、(文字)数字、(文字)字符串)。如果您处理对象(包括数组),那么两个变量将引用同一个对象。在这种情况下,您确实必须单独初始化它们:

    var frame = {}, 
        border = {};
    
    // DON'T DO THIS:
    var frame, 
        border = frame = {};
    

    更新,因为我觉得有必要解释为什么var border = frame = false;不起作用

    var 在这里不是传递的,这个表达式实际上是从右到左计算的。首先,将false 分配给frame,它将在作用域链中查找,最坏的情况下将变为全局。然后将frame的值赋值给局部变量border

    【讨论】:

    • 假设最短的版本,只是出于好奇,border会变成frame的指针吗?
    • @Alex:不,原语总是按值传递。如果你有一个对象,那么两者都会指向同一个对象。说得好。
    【解决方案2】:

    你可以这样做:

    var border = frame = false;
    

    【讨论】:

    • 这将使frame 全局化,或者至少不在与border 相同的范围内定义它,因为它没有事先声明。
    【解决方案3】:

    考虑:

    var border, frame;
    
    border = frame = false;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-09
      • 2021-10-23
      • 1970-01-01
      • 2012-03-06
      • 2016-07-25
      • 1970-01-01
      相关资源
      最近更新 更多