javascript中调用的这种形式或语法是啥? [关闭]
Posted
技术标签:
【中文标题】javascript中调用的这种形式或语法是啥? [关闭]【英文标题】:What is this form or syntax called in javascript? [closed]javascript中调用的这种形式或语法是什么? [关闭] 【发布时间】:2019-10-24 22:40:30 【问题描述】:在我正在处理的代码库中,有一行采用以下形式:
const key1: value1, key2:value2 = name
从左到右的分配是怎么回事? =
不是从右到左工作吗?
【问题讨论】:
这真的是 三个 单独的问题和 三个 单独的答案。这闻起来很像家庭作业问题。 看看Object_destructuring。//***
用于注释代码
不是作业,只是我问的不好的问题。
【参考方案1】:
如何重新定义变量
name
?
不是。
从左到右的分配是怎么回事? = 不是从右到左工作吗?
是的,这就是这里发生的事情。那是destructuring assignment。这一行:
const key1: value1, key2:value2 = name
相当于这个:
const value1 = name.key1;
const value2 = name.key2;
你说得对,它看起来像一个对象被分配给一个变量,但反过来。这是故意的。当你这样做时:
const x = a: 1, b: 2;
您正在创建一个对象(组合一个结构)并将其分配给x
。当你这样做时:
const a: vara, b: varb = x;
您正在解构(分解结构)右侧的对象到左侧的目标(vara
和varb
)。其语法是相同,只是颠倒过来。这两种形式也都有速记版本:
const a = 1;
const b = 2;
const x = a, b;
创建一个具有a
和b
属性的对象(使用来自a
和b
范围内标识符的值)。这个;
const a, b = x;
从x
获取a
和b
属性,并使用它来设置常量a
和b
的值。
我应该注意到,解构与let
或const
(或var
)无关。就像您可以在创建对象时使用任何范围内的变量或属性来为对象属性提供值一样,在解构时也可以这样做。因为对象解构以 开头,如果您不在表达式中执行此操作,则需要在其前面放置一个
(
,这样 就不会看起来像一个块的开头:
const x = a: 1, b: 2;
let a, b;
(a, b = x);
console.log(a, b); // 1 2
const y = ;
(a: y.ayyy, b: y.beee = x);
console.log(y); // ayyy: 1, beee: 2
在标有 *** 的行中引用了什么
name
?最初通过的还是创建的对象?
该代码中没有创建对象。 (嗯,箭头函数是一个对象,还有像词法环境这样的幕后规范级别的对象,但是……)
不可能说出您标记的行中的 name
是什么,因为这是一个语法错误,function
关键字启动了一个从未完成的函数声明。如果function(name)
是指someFunction(name)
,那么它就是传递给箭头函数的name
。
【讨论】:
【参考方案2】:如何重新定义变量名? 使用普通的 JS 语法:let newName = name
从左到右的分配是怎么回事? =不是从右到左工作吗? 分配是从右到左完成的。语法是对象解构。 你可以在这里了解它: https://hacks.mozilla.org/2015/05/es6-in-depth-destructuring/
在标有 *** 的行中引用了什么名称?最初通过的还是创建的对象? 代码中没有创建新对象。 'name' 指的是原始传递的对象。
【讨论】:
通常最好在代码文本上设置正确的格式(同时显示代码最佳实践)。例如: > 1.如何重新定义变量名?使用普通的 JS 语法:let newName = name;
一般来说,对您的提交应用适当的格式,以便区分常规文本和源文本或您想要突出显示的内容。一个很好的例子是您的 Item 3 > 在标记为***
的行中引用了什么名称?这是最初通过的还是创建的对象?代码中没有创建新对象。 name
指的是原始传递的对象。以上是关于javascript中调用的这种形式或语法是啥? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
Javascript 在这种情况下使用 IF 或 SWITCH 或“动态函数名”的最佳实践是啥