我正在尝试修复代码,但我停在两行代码上,它们是如此怪异以至于我无法理解它们。 所有行:
//Extraction of urls
let f = !this.last_product_url
for(const productLink of productLinks) {
const url = await productLink.getAttribute('href')
if(!f) {
f = url === this.last_product_url
f && productUrls.push(url)
}
else {
productUrls.push(url)
}
}
这两行是做什么的:
f = url === this.last_product_url
f && productUrls.push(url)
从句法上讲,情况如下:
F=url===this.last_product_url
:
检查变量url
和this.last_product_url
之间是否严格相等,并分配给f
。
F&& producturls.push(url)
:
如果F
为true
,则将url
推送到producturls
。
其工作原理如下。 语句a&& 计算b
,但仅当a
为true时才检查b
,因为如果a
为false,则a&& B
永远不为真。 因此,如果a
为真,则检查b
:推送url。
F=url===this.last_product_url
将url===this.last_product_url
的结果分配给F。
f和; producturls.push(url)如下所示:
if(f) productUrls.push(url)
f=url===this.last_product_url
等价于
if (url === this.last_product_url) {
f = true;
} else {
f = false;
}
和
F&& producturls.push(url)
等效于
if (f) {
productUrls.push(url)
}