Javascript内联if语句

use*_*833 3 javascript

我在javascript控制台中有一些奇怪的结果.我试图寻找三元运算符的替代(更易读)版本,只是为了好玩.打字:

{ if(3===4) {5} else {6} }
Run Code Online (Sandbox Code Playgroud)

在我的控制台中评估为6,但由于某种原因,我无法将其分配给变量,因此运行:

let a = { if(3===4) {5} else {6} }
Run Code Online (Sandbox Code Playgroud)

不要让我直接将它存储到变量中.所以我的主要问题是,如果这个块返回了什么,为什么我不能分配它?

T.J*_*der 8

您的代码无法访问块(和其他语句)返回值的事实.控制台可以查看结果,它存在于语言规范级别,但不存在于代码中.

你的选择是条件运算符¹(当你习惯了它时它是非常易读的,但是你已经说过你正在寻找它的替代品)或两个部分中的if/ else赋值a:

let a;
if (3 === 4) {
    a = 5;
} else {
    a = 6;
}
Run Code Online (Sandbox Code Playgroud)

或者您可以使用内联函数(IIFE):

let a = (() => { if (3 === 4} return 5 else return 6; })();
Run Code Online (Sandbox Code Playgroud)

还有一个针对" do表达式 " 的提议,如下所示:

// Currently a proposal, not implemented in engines yet
let a = do { if (3 === 4) 5; else 6; };
Run Code Online (Sandbox Code Playgroud)

该提案处于流程的第1阶段,因此它可能会或可能不会进展,如果它进展,它可能会在此之前发生显着变化.


¹尽管你经常看到"三元运算符",但正确的名称是条件运算符.它是一个三元运算符(一个接受三个操作数的运算符),目前是JavaScript唯一的三元运算符,但有一天可能会改变.:-)