如何在JavaScript中一次性分配多个变量?

30

有没有办法在 JavaScript 中像这样执行多个赋值:

var a, b = "one", "two";

这将等同于:

var a = "one";
var b = "two";

3
如果你想要:变量a赋值为"one",变量b赋值为"two"。 - Volkan Yılmaz
5个回答

64

在ES6中,您可以以这种方式实现:

var [a, b] = ["one", "two"];

上面的代码是ES6符号,称为数组解构/对象解构(如果它是一个对象)。

您在表达式的右侧提供数组,并在左侧用方括号括起来的逗号分隔变量。

第一个变量映射到第一个数组值,依此类推。


请将以下有关编程的内容从英语翻译成中文。仅返回翻译后的文本:请添加更多说明,以便回答完全可理解。 - webdeb
1
如果您对此处使用的技术术语不确定,请阅读并在您的答案中添加它。https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment - Rajaprabhu Aravindasamy
我们可以使用解构赋值,因为我们正在讨论数组。 - Piyush.kapoor
var [a, b] = [1,2,3,4,5] - webdeb
我会删除“对象解构”部分,因为它的语法与所介绍的不同,这可能会让初学者感到困惑。 - nCardot
2
这会产生构造右侧数组的任何开销吗?或者解释器是否足够聪明,当右侧是一个数组字面量时,有一条快速路径? - Will Chen

12
虽然你不能使用var a, b = "one", "two";来将它们分别赋值给每个变量,但你可以使用var a, b;将这些变量初始化为undefined

你也可以使用var a, b = 'foo';将'b'赋值为'foo',同时将'a'初始化为undefined

var a, b;

> a
--> undefined
> b
--> undefined
> var d, e;

> e
--> undefined

> f 
--> Uncaught ReferenceError: f is not defined

> var c, g = 'foo';

> c
--> undefined
> g
--> "foo"

对象解构

看起来像:

const user = {
  id: 42,
  is_verified: true
};

const {id, is_verified} = user;

console.log(id); // 42
console.log(is_verified); // true 

你还会在JavaScript中看到这个导入模块成员的语法:

从模块中导入多个输出。这将同时插入foo和bar到当前作用域中。

import {foo, bar} from '/modules/my-module.js';

0
如果您并不是非常坚持值在语句末尾的想法,那么这个方法可以实现:
var a = "one", b = "two";

如果你想给已经声明的变量赋值,可以使用逗号操作符将其变成一行代码。
a = "ONE", b = "TWO";

0

我想扩展Ryan的答案 - 特别是在涉及for循环时。通常情况下,人们可能会将for循环写成:

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

许多人认为,JS的解释性质导致在每个循环中重新评估 arr.length - 这会在大型循环中带来性能损失(根据上限性质,例如一个 function)。当性能至关重要时,他们建议反向迭代:
for (var i = arr.length-1; i >= 0; i--) {

然而,当顺序相关时,这种方法会导致问题 - 更不用说它是不常见的符号和不清晰的了。为了解决这个问题,您可以这样构造:

for (var i = 0, z = arr.length; i < z; i++) {

虽然不像标准循环那样简洁,但相比反向循环,它在表现上更好,同时阅读起来也更加容易


-13

不,你不能这样做。Javascript不支持这种类型的声明。


2
除了它确实可以(https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment)。 - nnnnnn
2
JS 的冰河时代里,似乎你可以使用 解构赋值 在 ES6 中。 - Morteza Tourani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接