Вопрос по google-closure-compiler, javascript, google-closure – @ Гарри, в коде есть огромная разница. Но после оценки обе стороны на самом деле являются строками "foo". Undefined - это результат void. Таким образом, даже если void 0 в коде не совпадает с undefined, он действительно оценивается как undefined, после оценки он не определен. Точно так же мы говорим «2 + 2 - это 4». Да, «2 + 2» - это НЕ 4, оно оценивается как 4, но после оценки - 4!

57

ользую"Закрытие Компилятор"при компиляции моих скриптов я трачу следующее:

Перед компиляцией:

// ==ClosureCompiler==
// @compilation_level SIMPLE_OPTIMIZATIONS
// @output_file_name default.js
// @formatting pretty_print,print_input_delimiter
// ==/ClosureCompiler==

var myObj1 = (function() {

  var undefined;   //<----- declare undefined

  this.test = function(value, arg1) {

    var exp = 0;
    arg1 = arg1 == undefined ? true : arg1;  //<----- use declare undefined
    exp = (arg1) ? value * 5 :  value * 10;

    return exp;
  };

  return this;
}).call({});

var myObj2 = (function() {

  this.test = function(value, arg1) {

    var exp = 0;
    arg1 = arg1 == undefined ? true : arg1;  //<----- without declare undefined
    exp = (arg1) ? value * 5 :  value * 10;

    return exp;
  };

  return this;
}).call({});

Составитель:

// Input 0
var myObj1 = function() {
  this.test = function(b, a) {
    a = a == void 0 ? true : a;  //<-----
    var c = 0;
    return c = a ? b * 5 : b * 10
  };
  return this
}.call({}), myObj2 = function() {
  this.test = function(b, a) {
    a = a == undefined ? true : a; //<-----
    var c = 0;
    return c = a ? b * 5 : b * 10
  };
  return this
}.call({});

При этом я считаю, что вопрос использования «void 0» и «undefined», есть ли разница в использовании, или два случая хорошо ?.

редактировать

если я определяю «var undefined», скомпилированный с «void 0», если я не определяю «undefined», скомпилированный с «undedined», то не имеет значения количество символов между «undefined» и «void 0»

Контрольная работа

Edit II: производительность, основанная наэта ссылка

Код и тест

IE 8:
typeof: 228 мс
undefined: 62 мс
недействительный 0: 57мс

Firefox 3.6:
typeof: 10 мс
undefined: 3 мс
недействительный 0: 3 мс

Опера 11:
typeof: 67мс
undefined: 19 мс
недействительный 0: 20 мс

Chrome 8:
typeof: 3 мс
undefined: 5 мс
недействительный 0: 3 мс

Ваш Ответ

1   ответ
65

От MDN:

void Оператор оценивает данноеexpression а затем возвращаетсяundefined.

Этот оператор позволяет вставлять выражения, которые вызывают побочные эффекты, в места, где желательно выражение с неопределенным значением.

Оператор void часто используется просто для полученияundefined примитивное значение, обычно использующееvoid(0)«(что эквивалентно»void 0"). В этих случаях глобальная переменнаяundefined может использоваться вместо этого (при условии, что оно не было назначено значению не по умолчанию).

Закрытие Компилятор меняет местамиvoid 0 потому что он содержит меньше символов, чемundefined, поэтому производит эквивалентный, меньший код.

Re: OP комментарий

да, я прочитал документацию, но в приведенном мной примере «закрытие Google» в случае использования «void 0» и другого «неопределенного»

Я считаю, что это на самом делеошибка в Google Closure Compiler!

@andres: см. мое редактирование. Matt Ball
да, я прочитал документацию, но в приведенном мной примере «закрытие Google» в случае использования «void 0» и другого «неопределенного» andres descalzo
@andres: хм, я понимаю, что вы говорите. Это странно... Matt Ball

Похожие вопросы