javascript 交换期间初始化前无法访问数组

frebpwbc  于 2023-02-21  发布在  Java
关注(0)|答案(3)|浏览(134)

我发现了一些奇怪的东西
我正在尝试将数组值0与数组值1交换
我发现以前的帖子说这是可能的

[arr[0], arr[1]] = [arr[1], arr[0]];

所以我想复制它

let array_names = ["Dave", "johson", "Lime", "Key", "Freeman", "Chell", "Shepart", "Furious"]
[array_names[0], array_names[1]] = [array_names[1], array_names[0]]

但是奇怪的事情发生了
我收到一条错误消息,指出

ReferenceError: Cannot access 'array_names' before initialization

我已经检查过了,没有一个错字。
另外,是的,在进行任何修改之前,我确实初始化了阵列

7jmck4yq

7jmck4yq1#

您的代码完全正确,但由于缺少分号,解释器对您的代码进行了不同的分析。

let array_names = ["Dave", "johson", "Lime", "Key", "Freeman", "Chell", "Shepart", "Furious"]
[array_names[0], array_names[1]] = [array_names[1], array_names[0]]

表达式的计算结果为

["Dave", "johson", ...][array_names[0], array_names[1]]

代码被分析为一行语句。
Shubhada给出的正确答案是

let array_names = ["Dave", "johson", "Lime", "Key", "Freeman", "Chell", "Shepart", "Furious"]; //Terminate statement
[array_names[0], array_names[1]] = [array_names[1], array_names[0]];
dwbf0jvd

dwbf0jvd2#

JS实际上试图将您的代码解释为:

// reduced for brevity
let array_names = ["Dave", "johson"][array_names[0], array_names[1]] = [array_names[1], array_names[0]]

它试图访问数组["Dave", "johson"]的索引[array_names[0], array_names[1]],而那时array_names还没有定义。
您可以(应该)使用分号来修复:

let array_names = ["Dave", "johson", "Lime", "Key", "Freeman", "Chell", "Shepart", "Furious"];
[array_names[0], array_names[1]] = [array_names[1], array_names[0]];
console.log(array_names);
okxuctiv

okxuctiv3#

我试着跟着

let array_names = [
  "Dave", "johson",
  "Lime", "Key",
  "Freeman", "Chell", 
  "Shepart", "Furious"
]

console.log(array_names)

array_names[0], array_names[1] = array_names[1], array_names[0]

console.log(array_names)

temp = array_names[0]
array_names[0] = array_names[1]
array_names[1] = temp

console.log(array_names)

并得到结果

[
  'Dave',    'johson',
  'Lime',    'Key',
  'Freeman', 'Chell',
  'Shepart', 'Furious'
]
[
  'Dave',    'johson',
  'Lime',    'Key',
  'Freeman', 'Chell',
  'Shepart', 'Furious'
]
[
  'johson',  'Dave',
  'Lime',    'Key',
  'Freeman', 'Chell',
  'Shepart', 'Furious'
]

就像here一样。但是使用您的代码,我可以获得

[
  'Dave',    'johson',
  'Lime',    'Key',
  'Freeman', 'Chell',
  'Shepart', 'Furious'
]
[
  'Dave',    'johson',
  'Lime',    'Key',
  'Freeman', 'Chell',
  'Shepart', 'Furious'
]

元素不交换的地方我也不明白。

相关问题