内部变量赋值';如果';条件


variable assignment inside 'IF' condition

在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可以做到的吗?我尝试过但没有成功,不确定是否有某种特殊的语法或

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

所以,首先声明:

var someVar;

然后使用它,你想怎么用:

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

注意,您还必须用括号包装否定的表达式(!(expression))

然而,这将不起作用:

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

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

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

工作示例

它也适用于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

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

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