是否有一个简洁的语法来声明JS`if`语句参数中的本地范围变量?

时间:2014-09-07 19:46:30

标签: javascript

以下语法在PHP中完全正常:

if($data = check_database($conds)) var_dump($data);
else echo "Not found";

但是,在Javascript中,我找不到相应的简写:

/*THIS CREATES A GLOBAL VARIABLE:*/
if(data = check_database(conds)) console.log(data);
else console.log("Not found.");


/*THIS RESULTS IN A SYNTAX ERROR (unexpected token var):*/
if(var data = check_database(conds)) console.log(data);
else console.log("Not found.");

我有没有办法在if(和其他)语句中声明Javascript中的本地范围的var。 注意:对于期望完整语句作为参数的for语句,这不是问题。

最终,我想避免使用以下详细语法:

/*THIS HAS THE DESIRED EFFECT, BUT UNDESIRED (VERBOSE) SYNTAX*/
var data;
if(data = check_database(conds)) console.log(data);
else console.log("Not found.");

2 个答案:

答案 0 :(得分:5)

这里的答案是你不应该首先尝试编写类似的代码。

你可能对自己聪明的极简主义代码充满信心,但有人阅读它会花费时间和精力来确定你是否真的打算使用单=,或者输入拼写错误==

只需编写明确意图的代码,并留下最小的错误空间。一些额外的行不会伤害到你:

var data = check_database(conds);
if (data) {
    console.log(data);
} else {
    console.log("Not found.");
}

<小时/> 附录:如果您真的觉得必须使用data变量三次而不是两次令人反感,那么另一种方法就是编写辅助函数:

function handleData(data, success, failure) {
    if (data) {
        success(data);
        return data;
    }

    failure();
    return null;
}

然后你可以像这样使用它:

handleData(check_database(conds), function (data) {
    console.log(data);
}, function () {
    console.log("Not found.");
});

这比我原来的例子少了一行,但是引入了许多不必要的开销和头痛,确保所有的括号和括号都匹配。此外,它还不太清楚,因为阅读它的人需要弄清楚/记住辅助功能的作用。

答案 1 :(得分:0)

这个具体的例子看起来像你可以重写为

console.log( check_database(conds) || "Not found." );

但通常情况下,你会离开:

if ( check_database(conds) ){
    console.log( data );
}
else {
    console.log( "Not found." );
}

var data = check_database(conds);
// maybe some other stuff
console.log( data || "Not found." );

甚至

var data = check_database(conds);
if ( data ){
    // some if true stuff
    console.log( data );
}
else {
    // some if false stuff
    console.log( "Not found." );
}