可以用es6语法在同一行声明和赋值多变量吗?
只是这里的例子,
假设我需要给mX,mY,mXDZ,mYDZ
赋值“50”。
我怎么能这样做?
let [mX,mY,mXDZ,mYDZ] = 50;
let mX,mY,mXDZ,mYDZ = 50; // !just why not!
我主要是在寻找可读性。
答案 0 :(得分:3)
不,这不太可能。解构需要将多个值 1 分配给多个目标,而不是单个值。但你可以作弊:
function* repeat(x) { while(true) yield x; }
let [mX, mY, mXDZ, mYDZ] = repeat(50);
除此之外,在多重声明中,每个变量都需要自己的初始化器:
let mX = 50, mY = 50, mXDZ = 50, mYDZ = 50;
你当然也可以使用一个共享变量:
let val = 50, mX = val, mY = val, mXDZ = val, mYDZ = val;
1:您还可以多次对同一属性进行解构(let {val:mX, val:mY, val:mXDZ, val:mYDZ} = {val:50};
),但仍需要一个对象。
答案 1 :(得分:0)
您可以声明所有变量,然后在单独的语句中初始化它们:
let mX,mY,mXDZ,mYDZ;
mX = mY = mXDZ = mYDZ = 50;
在变量声明语句(let
,var
或const
)中,语法是每个个体变量都可以具有初始化表达式。没有从一个表达式中进行多次初始化的规定。
通过解构,你可以这样做:
let [mX, mY, mXDZ, mYDZ] = [50, 50, 50, 50];
但这对我来说似乎并不“好”,至少对于可读性而言。这似乎容易出错。
非常重要的是要注意
let mX = mY = mXDZ = mYDZ = 50;
绝对不正确。该语句被解析为
let mX = (mY = mXDZ = mYDZ = 50);
这将创建一个局部变量(“mX”)和三个隐式全局变量。在“严格”模式下,这将是一个错误;在非严格模式下,它也是一个错误,但它更难调试。