首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript内联if语句

Javascript内联if语句
EN

Stack Overflow用户
提问于 2018-05-14 12:18:44
回答 4查看 4.7K关注 0票数 3

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

代码语言:javascript
复制
{ if(3===4) {5} else {6} }

在我的控制台中计算为6,但由于某些原因,我无法将它赋值给一个变量,因此运行:

代码语言:javascript
复制
let a = { if(3===4) {5} else {6} }

不允许我直接将它存储到变量中。所以我的主要问题是,如果这个块还东西,为什么我不能分配它呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-05-14 12:21:53

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

在这两个部分中,您的选项都是条件运算符(当您习惯它时,它非常容易读懂,但您已经说过要寻找它的替代方案)或if/else分配给a

代码语言:javascript
复制
let a;
if (3 === 4) {
    a = 5;
} else {
    a = 6;
}

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

代码语言:javascript
复制
let a = (() => { if (3 === 4} return 5 else return 6; })();

还有一项关于"表达“的建议,如下所示:

代码语言:javascript
复制
// Currently a proposal, not implemented in engines yet
let a = do { if (3 === 4) 5; else 6; };

该提案处于这个过程的第1阶段,因此它可能会或不会取得进展,如果它取得进展,它可能会在此之前发生显著的变化。

虽然你经常看到“三元运算符”,但正确的名称是条件运算符。它是--一个三值运算符(一个接受三个操作数的操作符),以及当前JavaScript唯一的三元操作符,但这可能会在某一天发生变化。:-)

票数 8
EN

Stack Overflow用户

发布于 2018-05-14 12:20:40

使用三元算子,因为您不能分配if语句:

代码语言:javascript
复制
let a = 3 === 4 ? 5 : 6;
票数 2
EN

Stack Overflow用户

发布于 2018-05-14 12:28:57

这不起作用的原因是,正如您所指出的,if是一种语句。赋值要求包含要赋值的值的表达式。一个语句本身没有一个值--它只是执行一些副作用。

如果要有条件地赋值,可以使用的是三元条件运算符,它是一个表达式:

let a = (3 === 4 ? 5 : 6)

此时,您可能会想,如果一个语句只是执行副作用,那么控制台为什么要打印一个值呢?这是因为语句有一个完成值,对于if语句是对应分支的完成值,对于表达式语句(块中的56是什么),表达式的计算结果是什么。当您想在控制台中计算一个表达式并查看它产生了什么时,这主要是非常有用的,而不必每次都发出一个console.log()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50330141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档