赋值左侧的 Javascript 对象括号符号 ({ Navigation } =)

IT技术 javascript webpack ecmascript-6
2021-01-26 23:30:11

我以前从未见过这种语法,我想知道它是怎么回事。

var { Navigation } = require('react-router');

左边的括号抛出一个语法错误:

意外的标记 {

我不确定 webpack 配置的哪一部分正在转换或语法的目的是什么。这是和谐的事情吗?有人可以启发我吗?

4个回答

它被称为解构赋值,它是ES2015 标准的一部分

解构赋值语法是一种 JavaScript 表达式,它可以使用反映数组和对象字面量构造的语法从数组或对象中提取数据。

来源: MDN 上的解构赋值参考

对象解构

 var o = {p: 42, q: true};
 var {p, q} = o;

 console.log(p); // 42
 console.log(q); // true 

 // Assign new variable names
 var {p: foo, q: bar} = o;

 console.log(foo); // 42
 console.log(bar); // true

数组解构

var foo = ["one", "two", "three"];

// without destructuring
var one   = foo[0];
var two   = foo[1];
var three = foo[2];

// with destructuring
var [one, two, three] = foo;
我对这个解决方案投了反对票,因为它没有解决他给出的例子,而这个例子没有显示在解决方案中。第一个示例显示了一个被解构的对象字面量。第二个显示正在解构的数组。但被质疑的例子是: var { Navigation } = require('react-router'); 此外,在他给出的例子中,大括号是不必要的。
2021-03-26 23:30:11
谢谢。我将接受这一点并提出另一个问题。现在我知道了语法是什么,我必须弄清楚它在我的项目中仍未编译的内容。
2021-03-27 23:30:11
知道为什么 [重新] 命名是“向后”的吗?也就是说,var {newVarName: oldVarName} = varSource;看起来很像{ newVarName: varSource.oldVarName }or scope.newVarName = varSource.oldVarName;,但这些显然是错误的。将旧/现有名称放在左侧是否有实际原因:
2021-03-28 23:30:11
@AndroidDev 欢迎您提出编辑建议;OP 似乎确实找到了令人满意的答案。
2021-03-30 23:30:11
Webpack 使用 Esprima 并将在 Esprima 2.0 发布时支持 es6在此之前,您可以使用将其编译为 es5 的 es6-loader 之一:github.com/conradz/esnext-loader github.com/Couto/6to5-loader github.com/shama/es6-loader
2021-04-04 23:30:11

这是解构赋值这是 ECMAScript 2015 的一个新特性。

var {
  AppRegistry,
  StyleSheet,
  Text,
  View,
} = React;

相当于:

var AppRegistry = React.AppRegistry;
var StyleSheet = React.StyleSheet;
var Text = React.Text;
var View = React.View;
var { Navigation } = require('react-router');

... 使用解构来实现与 ...

var Navigation = require('react-router').Navigation;

...但更具可读性。

更简洁……是的。更具可读性 - 不是真的。后一个例子使用更基本的结构更明确,因此更具可读性 - 但对于专家来说,前者更有效。
2021-03-31 23:30:11
这直接回答了所问的问题,因此可能是首先阅读的最佳答案,而一些较早的答案更深入。
2021-04-06 23:30:11

解构对象是 ES6 中的一项新功能。

众所周知,这里发生了一个赋值操作,这意味着右侧的值被分配给左侧的变量。

var { Navigation } = require('react-router');

在这种情况下,require('react-router')方法返回一个带有键值对的对象,例如:

{ Navigation: function a(){}, 
Example1: function b(){},
 Example2: function c(){}
}

如果我们想在返回的对象中使用一个键,比如Navigation变量,我们可以使用对象解构

这只有在我们手头有钥匙的情况下才有可能。

所以在赋值语句之后,局部变量Navigation将包含function a(){}

另一个例子看起来像这样。

var { p, q } = { p: 1, q:2, r:3, s:4 };
console.log(p) //1;
console.log(q) //2;