“IF”条件内的变量赋值

时间:2012-03-15 09:10:49

标签: php javascript

在PHP中,这样的事情很好:

<?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吗?我试过没有成功,不确定是否有某种特殊的语法或什么

4 个答案:

答案 0 :(得分:3)

是的,这很好。但是,如果您正在反转(!),那么您需要将赋值括在括号中,否则会出现语法错误。

function myFunc() {
    return false;
}

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

Working example

答案 1 :(得分:3)

您可以在JavaScript中执行相同操作,只有一个关键区别。 你不能在if子句中声明一个(本地范围的)变量,你可能只能引用它。

所以,先声明:

var someVar;

然后根据需要使用它:

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

请注意,您还必须用括号

包装否定表达式(!(expression))

然而,这不起作用:

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

答案 2 :(得分: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

在最后一种情况下,将赋值语句包装在括号中非常重要,因为!随后用于检查结果。

答案 3 :(得分:2)

这是我(在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");
}​