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

2022-08-30 00:41:13

我已经在JavaScript文件中初始化了全局范围内的几个变量:

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

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

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

有没有办法在一行代码中将所有这些变量设置为相同的值,或者我目前拥有的代码是执行此操作的最佳方法吗?


答案 1

没有什么能阻止你做

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

检查此示例

var a, b, c;
a = b = c = 10;
console.log(a + b + c)

答案 2

没有什么能阻止你做上述事情,但请坚持下去!

有一些陷阱。Javascript中的赋值是从右到左的,所以当你写:

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

它有效地转化为:

var moveUp = (moveDown = (moveLeft = (moveRight = (mouseDown = (touchDown = false)))));

这有效地转化为:

var moveUp = (window.moveDown = (window.moveLeft = (window.moveRight = (window.mouseDown = (window.touchDown = false)))));

无意中,您刚刚创建了5个全局变量 - 我很确定您不想这样做。

注意:我上面的示例假设您正在浏览器中运行代码,因此.如果您处于不同的环境中,这些变量将附加到该环境的全局上下文(即,在Node.js中,它将附加到该环境的全局上下文)。windowglobal

现在,您可以首先声明所有变量,然后将它们分配给相同的值,这样就可以避免这个问题。

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

长话短说,两种方法都可以正常工作,但第一种方法可能会在代码中引入一些有害的错误。如果不是绝对必要的,不要犯用局部变量在全局命名空间中乱扔垃圾的罪过。


旁注:正如注释中指出的那样(这不仅仅是在这个问题的情况下),如果所讨论的复制值不是原始值,而是对象,那么您最好了解按值复制与按引用复制。每当分配对象时,都会复制对对象的引用,而不是实际对象。所有变量仍将指向同一个对象,因此一个变量中的任何更改都将反映在其他变量中,如果您打算复制对象值而不是引用,则会给您带来重大麻烦。