Javascript 设置变量值的简写

Javascript 设置变量值的简写,javascript,shorthand,Javascript,Shorthand,我试图将两个变量声明为相同的值(false) 我倾向于在所有地方都这样做(比如,在我设计的几乎每个对象中) 或者交替地 border=false;frame=false; 有没有更好的方法可以同时声明两者的值?(例如代码高尔夫解决方案)您可以这样做: var border = frame = false; 如果在设置值时声明了两个变量,则可以。这有点奇怪,但它是有效的: var frame, border = frame = false; (我想这是你能买到的最短的了) 更好吗?

我试图将两个变量声明为相同的值(false)

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

或者交替地

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

您可以这样做:

var border = frame = false;

如果在设置值时声明了两个变量,则可以。这有点奇怪,但它是有效的:

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

考虑:

var border, frame;

border = frame = false;

这将使
frame
全局化,或者至少不会将其定义在与
border
相同的范围内,因为它事先没有声明。假设最短的版本,只是出于好奇,border是否会成为指向frame的指针?@Alex:不,原语总是按值传递。如果你有一个对象,那么两者都指向同一个。说得对。
var border, frame;

border = frame = false;