由于 javascript 的语法松散,但我对它的特殊字符含义非常惩罚。
在 react-native-navigation
中 tutorial有这个片段
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/