JavaScript Uglify不同,正确吗



我有一个丑陋的JS文件,我想在其中获得美化的版本,然后再次用grunt丑陋它。我希望它和第一个被放大的文件一样。

但当我做这件事的时候,有一部分和"如果"是不一样的。

这是未经验证的文件的一部分:

...function sendRequest(requestParams){if(Object.keys(requestParams).length>=1){$.ajax({type:"POST",url:VideoSearchUrl,data:requestParams,dataType:"xml"}).done(function(xmlDoc){buildResult($(xmlDoc)),responses++,requests==responses&&postSearchActions()})}}function...

但是经过美化的文件中的丑化版本看起来是这样的:

...function sendRequest(requestParams){Object.keys(requestParams).length>=1&&$.ajax({type:"POST",url:VideoSearchUrl,data:requestParams,dataType:"xml"}).done(function(xmlDoc){buildResult($(xmlDoc)),responses++,requests==responses&&postSearchActions()})}function...

为什么"if"被丢弃?在一个网络丑化中,它仍然存在。

或者它的意思是一样的?

由于短路评估,这是正确的。

当逻辑表达式从左到右求值时,使用以下规则对其进行可能的"短路"求值测试:

  • false&(任何东西(被短路评估为假
  • true||(任何东西(被短路评估为true

逻辑规则保证这些评估总是正确的请注意,上面表达式的anything部分没有求值,因此这样做的任何副作用都不会生效。此外,请注意,上面表达式的any部分是任何单个逻辑表达式(如括号所示(。

(我强调(

a = 1;
b = 1;
if (a == b) {
console.log(1);
}
// will log because it's like 
// (true) && expression
a == b && console.log(2);
// will NOT log because it's like 
// (false) && expression
a != b && console.log(3);

为什么要麻烦?

true&&expression短于
if(true){expression}(每个字节计数(

最新更新