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