设置变量值的速记法

3

我想要将两个变量声明为相同的值(false)。

我倾向于在很多地方这样做(比如,我在几乎每个我原型化的对象中都这样做)。

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

或者另一种选择是:
border=false;frame=false;

我是否有更好的方法可以同时声明这两个变量的值?(例如,一个代码高尔夫解决方案)

3个回答

3
如果在设置值时两个变量都已经声明,那么可以这样做。这有点奇怪,但是它确实有效:
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


假设最简短的版本,纯粹出于好奇,边框是否成为指向框架的指针? - Alex
1
@Alex:不,原始类型总是按值传递。如果你有一个对象,那么两个变量将指向同一个对象。实际上这是个好观点。 - Felix Kling

2
你可以这样做:
var border = frame = false;

6
这将使 frame 成为全局变量,或者至少不在与 border 相同的作用域中定义它(如果之前没有声明过的话)。 - Felix Kling

1

考虑:

var border, frame;

border = frame = false;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接