【发布时间】:2011-06-23 04:26:19
【问题描述】:
我正在尝试将 2 个变量声明为相同的值 (false)。
我倾向于在所有地方都这样做(例如,几乎在我原型的每个对象中)
var $a= {border:false
,frame:false};
或交替
border=false;frame=false;
有没有更好的方法可以同时声明两者的值? (例如代码高尔夫解决方案)
【问题讨论】:
标签: javascript shorthand
我正在尝试将 2 个变量声明为相同的值 (false)。
我倾向于在所有地方都这样做(例如,几乎在我原型的每个对象中)
var $a= {border:false
,frame:false};
或交替
border=false;frame=false;
有没有更好的方法可以同时声明两者的值? (例如代码高尔夫解决方案)
【问题讨论】:
标签: javascript shorthand
如果在设置值时声明了两个变量,则可以。这有点古怪,但确实有效:
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 = false;
【讨论】:
frame 全局化,或者至少不在与border 相同的范围内定义它,因为它没有事先声明。
考虑:
var border, frame;
border = frame = false;
【讨论】: