无法理解此javascript解构语句
我正在处理一个react/redux示例项目,由于我对Javascript有点陌生,我接触到的一些缺乏人手的ES6JavaScript是有限的。 我有困难的陈述如下:无法理解此javascript解构语句,javascript,reactjs,redux,Javascript,Reactjs,Redux,我正在处理一个react/redux示例项目,由于我对Javascript有点陌生,我接触到的一些缺乏人手的ES6JavaScript是有限的。 我有困难的陈述如下: function mapStateToProps(state) { const { selectedSubreddit, postsBySubreddit } = state; // This part here is confusing to me const { isFetching, lastUpdated,
function mapStateToProps(state) {
const { selectedSubreddit, postsBySubreddit } = state;
// This part here is confusing to me
const { isFetching, lastUpdated, items: posts } = postsBySubreddit[
selectedSubreddit
] || {
isFetching: true,
items: []
};
return {
selectedSubreddit,
posts,
isFetching,
lastUpdated
};
}
我基本上理解这个函数的目的,但我不确定我有评论的那部分是怎么回事
到目前为止,我收集的是postsBySubreddit是一个数组,我们根据selectedSubreddit从中获取元素。从该元素中,我们正在“提取”isFetching
,lastUpdated
,以及项
(同时将其别名为posts
)。让我感到不舒服的是|
操作符和它后面的大括号中的语句
这是一种病态吗?如果是,我们是说如果postsBySubreddit[selectedSubreddit]===undefined,我们给的是获取true的值和一个空数组吗?您的理解几乎是正确的。在使用|
操作符之前,您是正确的。但是对于|
操作符
如果postsBySubreddit[selectedSubreddit]=未定义,我们将为isFetching赋值为true,而items为空数组
如果postsBySubreddit[selectedSubreddit]
是错误的,例如0
,'
,false
,null
,未定义
,NaN
。请注意,[]
和{}
是真实的。(为了方便检查您是否忘记了,您可以在dev控制台或节点解释器中键入!!NaN
)
设a=b | | c
等于:
let a;
if (b)
a = b;
else
a = c;
类似地,让a=b |{x:0,y:1}
等价于
let a;
if (b)
a = b;
else
a = {x: 0, y: 1};
|
运算符意味着如果前一条语句为false,则运行下一条语句
看看这个:
if (thing == "ok" || otherthing == "notok") {
我想你知道这意味着什么。如果任一语句为true
,则输入块。它“运行”的方式是首先检查左语句(thing==“ok”
),如果为false,则运行下一条语句(otherthing==“notok”
)
同样的事情也可以分配给变量:
var result = thing == "ok" || otherthing == "notok";
如果left或right语句返回true
,那么这个函数将使结果成为true
,逻辑与我上面解释的相同
现在,如果我们进一步使用这个逻辑,我们可以做到:
var result = FIRST_STATEMENT || SECOND_STATEMENT;
这将运行FIRST_语句
,获取值并检查是否为false
。如果结果不是false,将运行第二个\u语句
并返回值。如果第一个\u语句
不是false
,则将返回该值(因为不会运行第二个\u语句
)
简而言之,|
操作符将从左到右计算语句,并返回第一个非false的语句
PD:请注意,null
、未定义
、”
、NaN
和0
与false
语句相同
PD2:为了澄清这一点,这些值之间没有三重相等(==
)。在casepostsBySubreddit[selectedSubreddit]中有|
是未定义的
您可能是指解构语句。请阅读正在发生的事情的答案,但请记住,对于解构常量{isFetching=true,lastUpdated,items:posts=[]}=postsBySubreddit[selectedSubreddit]
只需添加一件事。。。在javascript中,if(b)
返回false
if b===false或者如果b为空-其中没有任何值。因此,这是一种始终返回非空值的方法。