2017-09-15 33 views
1

由于其宽松的语法,但对于特殊字符的含义非常严格,所以我对javascript非常虚弱。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}

这对我来说是非常混乱,但是这几样小的事情是非常困难的谷歌,很抱歉,并提前感谢!

+2

请检查本参考链接:https://stackoverflow.com/questions/26999820/javascript-object-bracket-notation-navigation-on-left-side-of-assign –

回答

5

像你提到的基本上花括号是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', 
}; 

有了反应,终极版(如果你使用它),你会看到很多这样的:Object.assign({}, state, {});这是用来创建新对象与新状态覆盖国家的前面性质(因为redux需要一个新的对象)。这与使用{...state, ...newState}的情况相同。

请有人提醒我这个...Object方法被调用?

此行const isInfo = state.params.mode === 'info';是声明bool的简写。根据是否state.params.mode === 'info'isInfo将为真或假。

要翻译成以上的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]; 
} 

这样的事情我觉得呢?

+0

我明白了!这是一个非常明确的解释!非常感谢你! – Zennichimaro

+1

@Zennichimaro我不太喜欢这个名字,因为你可以告诉^^^这个ES6 env,所以我知道你的感受! (y) – sourRaspberri

+0

哈哈,是的。有很多我看到的JavaScript中的东西,我不明白,但不能谷歌! (是的,我用的是REDX !!)哦,不......我也没有得到你'高级'的东西,希望有人提醒你,哈哈 – Zennichimaro

4

在ES6中,您可以将对象解构为不同的变量。可以进一步了解它here

的解构赋值语法是JavaScript表达式 使得能够从 对象解包从数组值或属性,为不同的变量。

3

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

相关问题