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

Zen*_*aro 1 javascript react-native react-navigation

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

react-native-navigation 教程中有这个片段

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

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

我的代码不起作用.

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

从下一行开始,就有大括号缠绕 {user}

这对我来说非常混乱,但谷歌这些小事很难说,所以抱歉并提前感谢!

sou*_*rri 10

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

所以在javascript中制作这样的东西

const user = {
    name: 'bob',
    age: 23,
};
Run Code Online (Sandbox Code Playgroud)

正在制作一个你可以使用的用户对象:user.name将返回bob.

使用ES6,您可以从其他对象制作对象.

const {user} = state.params;
//user will be state.params.user
Run Code Online (Sandbox Code Playgroud)

以上基本上是将user对象的属性拉state.params入新变量.他们真正做的就是做到这一点,所以你不必state.params.user每次都写,而你可以写user.

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

const test = {
    ...user,
    anotherProperty: 'value',
};
Run Code Online (Sandbox Code Playgroud)

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

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

此行const isInfo = state.params.mode === 'info';是声明bool的简写.isInfo将是真还是假,取决于是否state.params.mode === 'info'.

将上述内容翻译成C++

if (state.params.mode === 'info') {
    bool isInfo = true;
else {
    bool isInfo = false;
}
Run Code Online (Sandbox Code Playgroud)

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

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


for (i=0;i<=2;i++) {
    y[i] = x[i];
}
Run Code Online (Sandbox Code Playgroud)

我认为有类似的东西吗?