Тернарный оператор JavaScript в полной проблеме оператора if / else - PullRequest
3 голосов
/ 12 января 2012

У меня есть следующее троичное утверждение:

$.history.init(function(url) {
        load(url == "" ? "#some-page" : url);
});

Который я переписал в:

$.history.init(function(url) {
         load( 
               if( url == ""){ url = "#some-page"
               } else { url = url }
         );
 });

У меня теперь есть ошибка в строке 3 if(url == ""), но я не понимаю, какая ошибка.
Любое предложение высоко ценится.

Ответы [ 5 ]

6 голосов
/ 12 января 2012

В JavaScript if является , а не выражением.Он не возвращает значение и не может быть помещен в вызов функции.То есть это недопустимо:

func(if (a) { ... } else { ... });

Это основное различие между if и ?: - оператор является выражением и возвращает значение;if является утверждением, не возвращает значение и не может использоваться везде.

Лучше всего, если вам нужно избегать троичного оператора, делать что-то вроде:

if (url == "") {
  url = "#some-page";
} 

load(url);

Вы также можете добиться того же эффекта, используя ||:

function (url) {
  load(url || "#some-page");
}

Это самый короткий и самый идиоматичный способ написания кода.

1 голос
/ 12 января 2012

if выражения ничего не возвращают в JS.Так что в основном это load(undefined).

Попробуйте вместо этого:

if (url === '') {
  url = '#some-page';
}

load(url);

Обратите внимание, что вам вообще не нужно else, потому что, если значение присутствует, вам нечегоизменить.

0 голосов
/ 12 января 2012

Требуется, чтобы оператор if находился вне функции load, т.е.

$.history.init(function(url) {
    if (url === "") { 
        url = "#some-page";
    }
    load(url);
});

Обратите внимание, что вам не нужно выражение else, поскольку url = url является избыточной операцией.

0 голосов
/ 12 января 2012

Ваш переписанный код недействителен.Попробуйте это:

$.history.init(function(url) {
      if(url == "") {
         load("#some-page");
      } else {
         load(url);
      }
});
0 голосов
/ 12 января 2012

переписать его как

$.history.init(function(url) {
        if( url == ""){ 
           url = "#some-page";
         }
         load( url );
 });
...