【问题标题】:javascript: meaning of curly brace between variable namejavascript:变量名之间大括号的含义
【发布时间】:2017-09-15 09:08:39
【问题描述】:

由于其语法松散,但对特殊字符的含义非常苛刻,我对 javascript 的使用非常薄弱。

react-native-navigationtutorial有这个sn-p

static navigationOptions = ({ navigation }) => {
   const {state, setParams} = navigation;
   const isInfo = state.params.mode === 'info';
   const {user} = state.params;
   return {
     title: isInfo ? `${user}'s Contact Info` : `Chat with 
 ${state.params.user}`,
     headerRight: (
       <Button
         title={isInfo ? 'Done' : `${user}'s info`}
         onPress={() => setParams({ mode: isInfo ? 'none' : 'info'})}
       />
     ),
   };
 };

最初,我错误地将第三行输入为: const {isInfo} = state.params.mode === 'info';

我的代码不起作用。

有什么区别: const isInfo = state.params.mode === 'info';

从下一行开始,有花括号包裹{user}

这让我很困惑,但是这种小事对 Google 来说是出了名的难,所以很抱歉,提前谢谢!

【问题讨论】:

标签: javascript react-native react-navigation


【解决方案1】:

基本上像你提到的花括号是javascript中的对象。

所以在javascript中做这样的事情

const user = {
    name: 'bob',
    age: 23,
};

正在创建一个用户对象,您可以像这样使用它:user.name,它将返回 bob

使用 ES6,您可以从其他对象生成对象。

const {user} = state.params;
//user will be state.params.user

上面基本上是将user从对象state.params拉到一个新变量中。实际上,他们所做的只是让您不必每次都写state.params.user,而是可以写user

您还可以使用上述技术做一些其他很酷的事情。您可以将数组和对象“合并”成新的常量,这非常酷。

const test = {
    ...user,
    anotherProperty: 'value',
};

使用 react 和 redux(如果你正在使用它)你会看到很多这样的:Object.assign({}, state, {}); 用于创建一个新对象,其状态的先前属性被新状态覆盖(因为 redux需要一个新对象)。这有点像使用{...state, ...newState}

请有人提醒我这个...Object 方法叫什么?

const isInfo = state.params.mode === 'info'; 这一行是声明布尔值的简写。 isInfo 是真还是假取决于state.params.mode === 'info'

为您将以上内容翻译成C++

if (state.params.mode === 'info') {
    bool isInfo = true;
else {
    bool isInfo = false;
}

我不记得 C++ 中是否存在与 JavaScript 中类似的 Object 数组,将 JavaScript 中的 Objects 视为具有已定义键的数组。这样,上面的{...state, ...newState} 就像键的“覆盖”。所以

int y = [1,2,3];
int x = [3,2,1];


for (i=0;i<=2;i++) {
    y[i] = x[i];
}

我想是这样的吗?

【讨论】:

  • 我明白了!这是一个非常清楚的解释!非常感谢!
  • @Zennichimaro 我对事物的名称不是很好,你可以看出 ^^^ 被扔进了这个 ES6 环境,所以我知道你的感受! (y)
  • 大声笑,是的。!!我在 javascript 中看到了很多我不理解但不能谷歌的东西! (是的,我使用 redux !!)哦不......我也没有得到你的“高级”东西,希望有人提醒你,哈哈
  • 大声笑,更糟糕的是我来自c,c++背景,一切都非常僵化,只有一种做事方式(没有速记),哈哈哈
  • 不知道!大声笑,但是是的,这就像两个对象的组合,其中 newState 的属性覆盖了状态属性:) 希望这会有所帮助!
【解决方案2】:

在 ES6 中,您可以将对象解构为不同的变量。你可以阅读更多关于它here

解构赋值语法是一个 JavaScript 表达式 可以从数组中解压缩值,或从 对象,转换为不同的变量。

【讨论】:

    【解决方案3】:

    这是 ES6 语法,表达式 const {user} = state.params; 等于 const user = state.params.user; 并且 const {isInfo} = state.params.mode === 'info'; 将导致 {isInfo: undefined}。 更多信息可以查看here

    【讨论】:

      猜你喜欢
      • 2018-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-26
      • 2019-07-04
      • 1970-01-01
      • 2020-10-13
      • 1970-01-01
      相关资源
      最近更新 更多