javascript:变量名之间花括号的含义

标签 javascript react-native react-navigation

由于 javascript 的语法松散,但我对它的特殊字符含义非常惩罚。

react-native-navigationtutorial有这个片段

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}

这让我很困惑,但这种小事对谷歌来说是出了名的困难,非常抱歉,提前致谢!

最佳答案

本质上,您提到的花括号是 JavaScript 中的对象。

所以在 javascript 中做这样的事情

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

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

使用 ES6,您可以从其他对象创建对象。

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

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

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

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

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

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

这一行 const isInfo = state.params.mode === 'info'; 是声明 bool 的简写。 isInfo 将是 true 或 false,具体取决于 state.params.mode === 'info'

为你把上面的翻译成C++

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

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

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


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

我觉得是这样的?

关于javascript:变量名之间花括号的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46235866/

相关文章:

javascript - HTML + JS - float 标题栏的变体和指向命名 anchor 错误的链接

javascript - 如何覆盖vuex存储数据

javascript - React native key 在 for 循环中未正确更新?

react-native - 无法从自定义标题切换堆栈导航器中的抽屉

javascript - 在react-navigation中,如何防止AppBar固定在顶部?我希望它在我滚动时消失

javascript - 英特尔XDK |安卓应用程序 |无法将用户输入发布到 Facebook 群组

javascript - 将表格单元格上的点击重定向到其中的 <a>

javascript - `onChangeText={(text) => this.setState({text})` 是如何工作的?

node.js - React Native、redux 和 axios : UnhandledPromiseRejectionWarning

react-native - 获取错误不变违反 : Tried to register two views with the same name