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