首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >看似荒谬的Javascript重组结果?

看似荒谬的Javascript重组结果?
EN

Stack Overflow用户
提问于 2019-08-09 04:10:28
回答 3查看 83关注 0票数 1

我正在运行以下代码:

代码语言:javascript
复制
const [a, b] = [1, 2]
const [c, d] = [3,4]
[a,b] = [b, a]
console.log(a, b, c, d)

预期结果:

代码语言:javascript
复制
2,1,3,4

实际结果:

代码语言:javascript
复制
1,2,2,1

我知道在每一行的末尾加上分号会解决问题,但我不明白为什么我会得到这样的结果,有人能解释一下为什么会发生这种情况吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-08-09 04:15:38

不能分配给a,b,因为它是const。你真正要做的是:

代码语言:javascript
复制
const [c, d] = [3,4][a,b] = [b, a]

既然a=1和b= 2,这意味着

代码语言:javascript
复制
const [c, d] = [3,4][1,2] = [2, 1]

代码语言:javascript
复制
[3,4][1,2] = [2,1]

因此,计算结果仅为2,1:

A=1b=2c=2d=1

它还设置了数组的第二个元素3,4到2,1,但是这个数组没有被分配到任何地方,所以这并不重要。

票数 5
EN

Stack Overflow用户

发布于 2019-08-09 04:13:18

分号很重要:

代码语言:javascript
复制
let [a, b] = [1, 2];
let [c, d] = [3,4];
[a,b] = [b, a];
console.log(a, b, c, d);

在原始代码中,第二行和第三行一起解释为const [c, d] = [3,4][a,b] = [b, a],从而将21分配给cd

在添加分号之后,将出现一个关于分配给常量变量的错误。将const声明更改为let将提供预期的输出。

票数 2
EN

Stack Overflow用户

发布于 2019-08-09 04:15:41

您可能希望使用varlet而不是const。您基本上是在做以下操作,因为您没有使用分号。a,b被分配给c,d

代码语言:javascript
复制
const [a, b] = [1, 2]
const [c, d] = [3,4][a,b] = [b, a]
console.log(a, b, c, d)

当你想要做的时候:

代码语言:javascript
复制
var [a, b] = [1, 2];
var [c, d] = [3,4];
[a,b] = [b, a];
console.log(a, b, c, d);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57423405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档