javascript中这种形式或语法叫什么?

jsa*_*our -6 javascript node.js

在我正在处理的代码库中,有一行采用以下格式:

    const {key1: value1, key2:value2} = name
Run Code Online (Sandbox Code Playgroud)

从左到右的分配是什么?=从右到左不起作用?

T.J*_*der 5

如何name重新定义变量?

不是。

从左到右的分配是什么?是不是从右到左工作?

是的,这就是这里发生的事情。那是破坏性的任务。这一行:

const {key1: value1, key2:value2} = name
Run Code Online (Sandbox Code Playgroud)

等效于:

const value1 = name.key1;
const value2 = name.key2;
Run Code Online (Sandbox Code Playgroud)

您说对了,它看起来像是对象被分配给变量,但是相反。那是故意的。当您这样做时:

const x = {a: 1, b: 2};
Run Code Online (Sandbox Code Playgroud)

您正在创建一个对象(将一个结构组合在一起)并将其分配给x。当您这样做时:

const {a: vara, b: varb} = x;
Run Code Online (Sandbox Code Playgroud)

解构(采取结构分开)在对象上对进入目标(varavarb左)。语法相同,只是颠倒了。两种形式都有速记版本:

const a = 1;
const b = 2;
const x = {a, b};
Run Code Online (Sandbox Code Playgroud)

创建一个具有ab属性的对象(带有ab范围内标识符的值)。这个;

const {a, b} = x;
Run Code Online (Sandbox Code Playgroud)

从中获取ab属性x并使用它设置常数a和的值b

我应该注意,关于销毁的任何内容都不与letconst(或var)相关。就像在创建对象时可以使用任何范围内的变量或属性来提供对象属性的值一样,在进行销毁时也可以这样做。因为对象解构始于{,如果您不在表达式中执行此操作,则需要(在其前面放一个,这样{看起来就不会像块的开头:

const {key1: value1, key2:value2} = name
Run Code Online (Sandbox Code Playgroud)

name***行中引用了什么?最初通过的还是创建的对象?

该代码中没有创建对象。(好吧,箭头功能是一个对象,并且在幕后规范级别的对象(如词汇环境),但是...)

不能说出name您标记的行中的内容,因为这是语法错误,function关键字启动了一个从未完成的函数声明。如果按function(name)您的意思someFunction(name),它将被name传递到arrow函数中。