JavaScript Uglify отличается и правильный? - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть увеличенный файл JS, в котором я хочу получить улучшенную версию, а затем снова увеличить ее с помощью grunt.И я ожидаю, что это будет то же самое, что и первый файл с увеличенной текстурой.

Но когда я делаю это, одна часть с 'if' отличается.

Это часть увеличенной частиfile:

...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'?В онлайн-гуглефере он все еще там.

Или это означает то же самое?

1 Ответ

0 голосов
/ 15 ноября 2018

Это правильно из-за Оценка короткого замыкания .

Поскольку логические выражения оцениваются слева направо, они проверяются на возможную оценку "короткого замыкания" с использованием следующих правил:

  • false && (что угодно) - короткое замыкание, оцененное как false.
  • верно || (что-нибудь) - короткое замыкание, оцененное как истинное

Правила логики гарантируют, что эти оценки всегда верны. Обратите внимание, что любая часть вышеприведенных выражений не оценивается , поэтому любые побочные эффекты от этого не вступают в силу. Также обратите внимание, что любая часть вышеприведенного выражения является любым логическим выражением (как указано в скобках).

(выделено мной)

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} (считается каждый байт)

...