分配左侧的Javascript对象括号表示法({Navigation} =)

cap*_*ill 97 javascript ecmascript-6 webpack

我以前没有看过这种语法,我想知道它的全部内容.

var { Navigation } = require('react-router');
Run Code Online (Sandbox Code Playgroud)

左侧的括号抛出语法错误:

意外的标记 {

我不确定webpack配置的哪个部分正在转换或者语法的目的是什么.这是和谐的事吗?有人可以开导我吗?

Rud*_*chi 107

这是解构分配.这是ECMAScript 2015的新功能.

var {
  AppRegistry,
  StyleSheet,
  Text,
  View,
} = React;
Run Code Online (Sandbox Code Playgroud)

相当于:

var AppRegistry = React.AppRegistry;
var StyleSheet = React.StyleSheet;
var Text = React.Text;
var View = React.View;
Run Code Online (Sandbox Code Playgroud)


Mat*_*all 104

它被称为解构分配,它是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
Run Code Online (Sandbox Code Playgroud)

数组解构

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;
Run Code Online (Sandbox Code Playgroud)

  • 谢谢.我将接受这个并提出另一个问题.现在我知道语法是什么,我必须弄清楚它在我的项目中仍然没有编译. (4认同)
  • 我拒绝此解决方案,因为它无法解决他给出的示例,该示例未在解决方案中显示。第一个示例显示了被分解的对象文字。第二个图显示了一个被解构的数组。但是被质疑的例子是这样的:var {Navigation} = require('react-router'); 此外,在他给出的示例中,不需要使用大括号。 (2认同)
  • @AndroidDev欢迎您推荐编辑; OP肯定似乎找到了令人满意的答案. (2认同)

Cli*_*all 11

var { Navigation } = require('react-router');
Run Code Online (Sandbox Code Playgroud)

...使用解构来实现与...相同的事情

var Navigation = require('react-router').Navigation;
Run Code Online (Sandbox Code Playgroud)

......但更具可读性.

  • 这直接回答了所提出的问题,因此可能是首先阅读的最佳答案,而一些较早的答案则更深入. (3认同)
  • 更简洁...是的。更具可读性-并非如此。使用更基本的构造,后一个示例更加明确,因此更具可读性-但对于专家而言,前一个示例更有效。 (3认同)

Raj*_*ari 7

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

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

var { Navigation } = require('react-router');
Run Code Online (Sandbox Code Playgroud)

在这种情况下,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;
Run Code Online (Sandbox Code Playgroud)