2013-09-28 2 views
0

Можно ли объявить переменную в условном выражении?Объявление переменной в условных выражениях (тернарный оператор)

например: Код ниже возвращает синтаксическую ошибку (потому что я объявил переменную x в условном выражении?).

var a = document.getElementById("userData"); 
var d = a.value; 
function() { 
(d.length>15)?(
alert("your input was too long")):(
var x = parseInt(d).toString(2), 
a.value=x 
); 
} 

, очевидно, это может быть исправлено путем простого добавления var x; вне заявления, но это возможно для переменных, которые будут объявлены здесь?

+1

... почему вы хотите это сделать? – delnan

+0

Я бы использовал if..else в этом случае и сохранил его для чтения. – karthikr

+0

Нет. Тогда что-то вроде 'var a = (var b! = Undefined)? (var c = 1): (var d = 2); 'законно – davidkonrad

ответ

7

Можно ли объявить переменную в условном выражении?

Номер var - инструкция, а операнды conditional expression - это выражения. Языковая грамматика этого не позволяет. К счастью.

0

Нет. Но вы можете инициализировать его undefined и установить его с условием.

function Test() 
{ 
    d = 25.6654; 
    var x = (d.toString().length > 15) ? parseInt(d).toString() : undefined; 

    alert(typeof x === "undefined"); 
} 

Тогда вы можете работать с if(typeof x == "undefined") //do something

1

Вы можете сделать это с помощью немедленно вызываемыми функции:

(d.length>15)?(
    alert("your input was too long")): 
    (function(){ 
     var x = parseInt(d).toString(2); 
     a.value=x; 
    }()) 
); 

Но обратите внимание, что переменная x не будет существовать за пределами внутренней функции. (Я не могу сказать, хотите ли вы, чтобы он существовал после оценки выражения или нет.)

+0

+1 Да. Вы ** можете ** (при условии, что вам не нужна переменная вне выражения), но вы не должны этого делать. :-) –

+0

@ T.J.Crowder Выражение самозапускаемой функции не является «орехом», это основной способ создания новой области в JavaScript, поскольку язык не имеет области блока. В этом случае он служит этой цели. (То, что «не следует» делать в этом случае, использует тернарный оператор вместо правильного условного.) – cdhowie

+0

@ cdhowie: Это не орехи как таковые, и каждый, кто выполняет значительную работу JavaScript, делает это регулярно. * Это * использование этого было бы орехом. :-) И, конечно же, переменная не будет доступна за ее пределами в любом случае, как вы совершенно правильно указали. –

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