在 querySelectorAll() 之前调用 querySelector()



阅读一些在网站后台加载的js文件,我遇到了这个结构:

var foo = (document.querySelector(".some-selector"), 
document.querySelectorAll(".some-selector > ul > li"));
Array.prototype.forEach.call(foo, ...);

querySelector()的调用似乎已经过时了,但是通过该脚本的代码和源代码,我不觉得这是一个错误,或者他们的意思是[...]而不是(...)。代码被缩小,但没有混淆;对我来说,这似乎是故意的,但我不明白重点。

我最好的猜测是,要么对querySelector()的调用以某种方式加快了对querySelectorAll()的后续调用,要么这是某种浏览器黑客攻击。但是我还找不到与此结构相关的任何内容。

这里有人知道这是怎么回事,或者为我指出正确的方向吗?

这是逗号(,(运算符的特点之一。

让我解释一下它的含义,

var x = (2+3, 4+5, 6+7);
console.log(x); // 13

它用于将多个语句级联到单个语句中。从上面的代码中,我们可以看到输出是 13 而不是 7 或 9。这是因为,javascript 执行了 paranthesis 中的所有语句,但只返回最后一个语句的结果。因此,"x"的值为"13"。

谈到手头的问题,

var foo = (document.querySelector(".some-selector"), 
document.querySelectorAll(".some-selector > ul > li"));
Array.prototype.forEach.call(foo, ...);

执行第一个语句,但不返回其结果。因此,"foo"的值将是第二个语句的结果。稍后从第二个语句循环遍历结果数组。

欲了解更多信息,请单击此处。

最新更新