JS在线索es6中声明并分配多变量?

时间:2018-04-07 14:27:34

标签: javascript variables ecmascript-6 declaration destructuring

可以用es6语法在同一行声明和赋值多变量吗? 只是这里的例子, 假设我需要给mX,mY,mXDZ,mYDZ赋值“50”。 我怎么能这样做?

let [mX,mY,mXDZ,mYDZ] = 50;
let mX,mY,mXDZ,mYDZ = 50; // !just why not! 

我主要是在寻找可读性。

2 个答案:

答案 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;

在变量声明语句(letvarconst)中,语法是每个个体变量都可以具有初始化表达式。没有从一个表达式中进行多次初始化的规定。

通过解构,你可以这样做:

let [mX, mY, mXDZ, mYDZ] = [50, 50, 50, 50];

但这对我来说似乎并不“好”,至少对于可读性而言。这似乎容易出错。

非常重要的是要注意

let mX = mY = mXDZ = mYDZ = 50;

绝对不正确。该语句被解析为

let mX = (mY = mXDZ = mYDZ = 50);

这将创建一个局部变量(“mX”)和三个隐式全局变量。在“严格”模式下,这将是一个错误;在非严格模式下,它也是一个错误,但它更难调试。