2012-01-12 2 views
3

я следующее тройном заявление:JavaScript трехкомпонентную оператора в полном объеме, если/другое заявление вопрос

$.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 == ""), но я не понимаю, какую ошибку.
Любое предложение очень ценится.

ответ

6

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

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

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

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

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

load(url); 

Вы также можете достичь того же эффекта с помощью ||:

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

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

0

переписывают как

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

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

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

Вам нужно if заявления, чтобы быть вне функции load, т.е.

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

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

1

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

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

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

load(url); 

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

Смежные вопросы