所以这就是我未压缩的样子:
function extractDropdownValues(){
var all_selected = true;
$('.variant_options select').each(function() {
if (this.selectedIndex == 0) {
all_selected = false;
}
});
这是压缩版本:
extractDropdownValues(){var e=!0;$(".variant_options select").each(function(){this.selectedIndex==0&&(e=!1)});
我对e=!0
等同于all_selected = true
以及this.selectedIndex==0
if语句的压缩版本感到困惑。在压缩版本中,它表示if
此索引== 0,然后将其设置为false。
但是在压缩版本中,它似乎正在检查selectedIndex
是否等于0 &&
all_selected = false
(即e=!1
)。但是我不希望这是if
条件,这应该是if
条件满足后的结果。
我读错了吗?
P.S。压缩版本在生产中不起作用,但未压缩版本在dev中工作。我不确定这两者是否相关,但从表面上看,它们似乎与我完全相同。
修改1
我怀疑,我通过JS预处理器运行缩小的JS,这就是结果:
function extractDropdownValues() {
var e = !0;
$(".variant_options select").each(function () {
this.selectedIndex == 0 && (e = !1)
});
Soo ......啊...... WTF正在这里发生?
答案 0 :(得分:5)
0为false,因此布尔否定为0(false)为真。
类似地,布尔形式的1为真,因此布尔值为1(true)的否定为假。
&&
是短路'和'运算符,意味着只要它知道结果是什么,它立即返回 - 如果它的第一个操作数为假,则返回false。如果它的第一个操作数为true,那么它只会计算第二个操作数并返回它。
所以e=!1
仅在this.selectedIndex==0
为真时执行(因为如果它是假的,它知道它将返回false并提前中止)。