我在一个JavaScript文件中初始化了全局作用域中的几个变量:

var moveUp, moveDown, moveLeft, moveRight;
var mouseDown, touchDown;

我需要把所有这些变量都设为false。这是我目前拥有的代码:

moveUp    = false;
moveDown  = false;
moveLeft  = false;
moveRight = false
mouseDown = false;
touchDown = false;

是否有任何方法,我可以设置所有这些变量的相同值在一行代码,或者是代码我目前有最好的方式来做到这一点?


当前回答

如果你想声明多个const变量,你可以通过

const [a, b, c, d] = [[], [], [], []]

同时分配空对象或任何值。

其他回答

将变量放入数组中,并使用for循环将相同的值赋给多个变量。

  myArray[moveUP, moveDown, moveLeft];

    for(var i = 0; i < myArray.length; i++){

        myArray[i] = true;

    }

我个人总是尽量避免var,总是使用let和const,我从发生的错误和大多数最佳实践建议中学到了它,所以下面在评论中提到,但更准确地说:

function good() {  
    let a;
    let b;
    let c;
    let d;        
    a = b = c = d = 'hello';    
    console.log(d);    
}

function bad() {
    //only the first variable is declared as local
    let a = b = c = d = 'bye';
    console.log(d)
}

let a;
let d;

good();
bad();

//expected undefined
console.log(a);

//expected bye 
console.log(d);

您所列出的原始变量可以在使用解构赋值的短代码行中声明并赋值给相同的值。关键字let、const和var都可以用于这种类型的赋值。

let [moveUp, moveDown, moveLeft, moveRight, mouseDown, touchDown] = Array(6).fill(false);

当尝试将多个变量初始化为相同的值时,还有另一个选项不会引入全局陷阱。这条路是否比远路更可取,这是一个判断。它可能会更慢,并且可能更具可读性。在您的具体情况下,我认为长距离可能更具可读性和可维护性,而且速度更快。

另一种方法使用解构赋值。

let [moveUp, moveDown, moveLeft, moveRight, mouseDown, touchDown] = Array(6).fill(false); console.log(JSON.stringify({ moveUp, moveDown, moveLeft, moveRight, mouseDown, touchDown }, null, ' ')); // NOTE: If you want to do this with objects, you would be safer doing this let [obj1, obj2, obj3] = Array(3).fill(null).map(() => ({})); console.log(JSON.stringify({ obj1, obj2, obj3 }, null, ' ')); // So that each array element is a unique object // Or another cool trick would be to use an infinite generator let [a, b, c, d] = (function*() { while (true) yield {x: 0, y: 0} })(); console.log(JSON.stringify({ a, b, c, d }, null, ' ')); // Or generic fixed generator function function* nTimes(n, f) { for(let i = 0; i < n; i++) { yield f(); } } let [p1, p2, p3] = [...nTimes(3, () => ({ x: 0, y: 0 }))]; console.log(JSON.stringify({ p1, p2, p3 }, null, ' '));

这允许您将一组var、let或const变量初始化为具有相同预期作用域的单行上的相同值。

引用:

MDN:数组全局对象 MDN: Array.fill

在Javascript中分配多个变量到相同的值?

let a=10
let b=10
let c=10
let d=10
let e=10
console.log(a,b,c,d,e)