我的一个朋友给我写了一些代码(不幸的是,他现在无法访问),我正在努力理解它。
const people = [
{name: 'morgan', group: 3},
{name: 'courtney', group: 1},
{name: 'brian', group: 1},
{name: 'dog', group: 2}
]
const partitionedPeople = sortedPeople.reduce(
(parts, person) => {
const part = parts[0]
if (part && person.group === part.group) {
console.log('found part.group')
} else {
console.log('did not find part.group')
}
return parts;
},
[]
);
我不明白的是if (part && person.group === part.group) {}
如果我将其更改为if (person.group === part.group) {}
,我会收到错误消息。
因为通过第一次迭代,part
未定义(空列表中的第一项)并且我要求它找到未定义的.group
,这是有道理的。
但是,在(part && person.group === part.group)
中添加时效果很好。
part && person.group
这样做的功能是什么?
答案 0 :(得分:2)
&&
运算符的工作方式如下:
这里,如果part
是undefined
(这是假的),表达式的计算结果为undefined
(因为返回了第一个操作数)。 undefined
是假的,因此不会执行if
正文。
如果定义part
并且真实,那么然后才会&&
评估第二个操作数,将person.group
与part.group
进行比较,返回比较结果。
在JavaScript中,除了false
,0
,""
,null
,undefined
和NaN
之外,一切都很简洁。
答案 1 :(得分:1)
if
语句可以像这样重写:
if (part) {
if (person.group === part.group) {
//...
}
}
&&
之前的部分检查以确保part
存在(不是undefined
,null
或0
等。
&&
检查person.group
和part.group
答案 2 :(得分:0)
如果&&
的左表达式的值是假的,则返回左表达式的值,否则返回右表达式的值。
因此,当part
为undefined
时,(part && person.group === part.group)
会立即返回part
(即undefined
)。
答案 3 :(得分:0)
失败是因为part
没有名为group
的属性,可能是因为part
本身未定义。
使用&&
可确保仅在第一个条件&&
为真时才处理/评估part
之后的第二个条件。
因此,首先将part
置于person.group === part.group
,仅当part
为真时才会评估part
。正如我已经通过删除part.group
所说的那样,然后允许代码评估具有.group
的第二个条件以及每当您尝试从未定义的对象访问属性(Uncaught TypeError: Cannot read property 'group' of undefined
)时将导致未捕获的TypeError。
我认为你的错误看起来像这样:
$(".nested_inside").hover( function(){
$(this).animate({"top": "-10px"});
},function(){
$(this).animate({"top":"initial"});
})