将值重新分配给使用解构创建的变量的正确方法? (数组解构)

时间:2019-01-31 17:10:58

标签: javascript variables ecmascript-6 destructuring

我刚刚被介绍去构架(n00b),并且一直跟随着有关前端大师的课程学习。呈现方式如下:

let [firstVar, secondVar] = ["firstValue", "secondValue"]

有道理。我可以(并且已经)验证firstVar的值为"firstValue"secondVar的值为"secondValue"

令人困惑的是,我似乎无法重新分配存储在这些变量中的值。我已经使用了constlet(以上面显示的方式),并试图重新分配变量。在使用const声明变量的地方,不会引发任何错误。如果我在浏览器控制台中玩耍,则会得到以下信息:

const [firstThing, secondThing] = ["first value", "second value"] 
console.log(firstThing) // expected output: first value
firstThing = "some new thing" 
console.log(firstThing) // expected output: first value

FireFox控制台中此行为的屏幕快照(我导航到about:blank以确保内存中没有旧变量): Behavior in firefox console

同样,不会引发任何错误(在尝试重新分配给const变量时,通常会发生此错误。

如果执行以下操作,则会得到预期的行为:

[firstThing] = ["some new value"]
// TypeError: invalid assignment to const 'firstThing'

使用let完成销毁后,我可以(似乎)使用类似的语法重新分配值(将变量和新值括在方括号中)。

编辑: 人们显示他们在运行浏览器中显示的代码时无法重现该问题。我最初没有在Node REPL中使用它,但是这样做会产生预期的行为(尝试将其重新分配给const var会引发错误,let变量可以重新分配)。此时,我很好奇为什么浏览器中的行为与此不同。我正在使用64.0.2版本。

为弄清楚这一点,我略读了以下内容:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment

https://javascript.info/destructuring-assignment

似乎都没有涉及将值重新分配给使用解构创建的变量(或对象)的问题。从技术上来说,我的处理方式是否正确?我也开始被介绍到垃圾收集等中(我只有最简单的介绍),所以我想知道我正在使用的重新分配“技术”是否正在创建一堆不会收集垃圾的东西或创建怪异的指针等,可能会在以后引起问题。

2 个答案:

答案 0 :(得分:0)

这似乎在FireFox中有点奇怪。我刚刚更新为65.0,此现象不再发生。

答案 1 :(得分:-1)

  

没有引发错误(尝试重新分配给const变量时,通常会发生这种错误。

我无法复制。运行该代码时,我看到一个错误:“未捕获的TypeError:分配给常数变量。”

const [firstThing, secondThing] = ["first value", "second value"] 
console.log(firstThing) // expected output: first value
firstThing = "some new thing" 
console.log(firstThing) // expected output: first value

如果我使用let,它可以让我重新分配。

let [firstThing, secondThing] = ["first value", "second value"] 
console.log(firstThing) // expected output: first value
firstThing = "some new thing" 
console.log(firstThing) // expected output: first value

也无法在firefox的控制台中复制:

enter image description here

要诊断您的环境与我们的环境之间的差异有点困难。可能知道其他版本的浏览器,也许是插件。无论如何,您发布的代码仅替换为let而不是const是重新分配变量的正确方法。