2012-03-15 2 views
3

в PHP, что-то, как это прекрасно:присвоение переменной внутри «IF» условие

<?php 
    if (!$my_epic_variable = my_epic_function()){ 
     // my epic function returned false 
     // my epic variable is false 
     die("false"); 
    } 

    echo $my_epic_variable; 
?> 

Я полагаю, более короткий способ сделать:

$my_epic_variable = my_epic_function(); 
if (!$my_epic_variable){ 
     die("false"); 
} 

Может ли это быть сделано JavaScript? Я пытался без успеха, не был уверен, есть ли какой-то специальный синтаксис или что-то

+0

Fyi, в таком случае дополнительные круглые скобки являются хорошей идеей, чтобы сделать намерение понятным: 'if ((foo = bar())) – ThiefMaster

+0

Это зависит ... Чего вы пытаетесь достичь? JavaScript довольно «уникален», поэтому для лучшего результата, пожалуйста, предоставьте нам дополнительную информацию ... – benqus

ответ

3

Вы можете сделать то же самое в JavaScript, с одним существенным отличием. Вы не можете объявить переменную a (локальная область) внутри предложения if, вы можете ссылаться только на нее.

Таким образом, объявить его первым:

var someVar; 

Затем с помощью его же вы хотите:

if (!(someVar = someFunction())) { /* do some stuff */ } 

Обратите внимание, что вы также должны обернуть отрицается выражения (!(expression)) со скобками

Это, однако, , не будет работать:

if (var someVar = someFunction()) { /* NOPE */ } 
+0

+1 хорошая точка –

+1

Вы не можете объявить ** локальную ** переменную внутри предложения if, так как для нее требуется ключевое слово 'var'.Вы можете, однако, объявить глобальную переменную (хотя, как правило, это плохая идея). –

+0

@ AnthonyGrist хорошая точка - обновил мой ответ, чтобы отразить ваш комментарий. – jlb

2

Он работает в JS тоже:

var foo = null; 

if (foo = 1){ 
// some code 
} 

alert (foo); // 1 

Или назначение даже с функцией:

var foo = null; 

function getFoo(){ 
    return 1; 
} 

if (foo = getFoo()){ 
// some code 
} 

alert (foo); // 1 

с отрицанием, вам нужно добавить фигурные скобки:

var foo = null; 

function getFoo(){ 
    return 1; 
} 

if (! (foo = getFoo())){ 
// some code 
} 

alert (foo); // 1 

в последнем случае важно, чтобы обернуть назначения STA в то время как ! используется для проверки на результат.

+0

Не оригинальная проблема, исходящая от! оператора? Вы не используете его в своем примере. – Tibo

+0

@Tibo: Обновлено, что на всякий случай :) – Sarfraz

3

Да, это работает нормально. Однако, если вы инвертируете (!), тогда вам нужно обернуть назначение в круглые скобки, иначе вы получите синтаксическую ошибку.

function myFunc() { 
    return false; 
} 

if(!(myVar = myFunc())) { 
    console.log('true'); 
}  

Working example

1

Это предпочтительный метод для меня (в PHP), потому что это делает его совершенно ясно, что вы не имели в виду использовать условие ==, но сделал ошибку.

if (($my_epic_variable = my_epic_function()) !== NULL){ 
    // my epic function returned false 
    // my epic variable is false 
    die("false"); 
} 

В JavaScript я бы, наверное, сделать:

function my_epic_function() { 
    return 5; 
} 

var my_epic_variable; 
if ((my_epic_variable = my_epic_function()) !== null){ 
    alert("we're in"); 
}​ 
Смежные вопросы