我在javascript控制台中得到了一些奇怪的结果。我试图寻找一个替代的(更易读的)版本的三元操作符,只是为了好玩。打字:
{ if(3===4) {5} else {6} }在我的控制台中计算为6,但由于某些原因,我无法将它赋值给一个变量,因此运行:
let a = { if(3===4) {5} else {6} }不允许我直接将它存储到变量中。所以我的主要问题是,如果这个块还东西,为什么我不能分配它呢?
发布于 2018-05-14 12:21:53
代码无法访问块(和其他语句)返回值的事实。控制台可以看到结果,并且它存在于语言规范级别,但不在代码中。
在这两个部分中,您的选项都是条件运算符(当您习惯它时,它非常容易读懂,但您已经说过要寻找它的替代方案)或if/else分配给a:
let a;
if (3 === 4) {
a = 5;
} else {
a = 6;
}或者您可以使用内联函数(IIFE):
let a = (() => { if (3 === 4} return 5 else return 6; })();还有一项关于"表达“的建议,如下所示:
// Currently a proposal, not implemented in engines yet
let a = do { if (3 === 4) 5; else 6; };该提案处于这个过程的第1阶段,因此它可能会或不会取得进展,如果它取得进展,它可能会在此之前发生显著的变化。
虽然你经常看到“三元运算符”,但正确的名称是条件运算符。它是--一个三值运算符(一个接受三个操作数的操作符),以及当前JavaScript唯一的三元操作符,但这可能会在某一天发生变化。:-)
发布于 2018-05-14 12:20:40
使用三元算子,因为您不能分配if语句:
let a = 3 === 4 ? 5 : 6;发布于 2018-05-14 12:28:57
这不起作用的原因是,正如您所指出的,if是一种语句。赋值要求包含要赋值的值的表达式。一个语句本身没有一个值--它只是执行一些副作用。
如果要有条件地赋值,可以使用的是三元条件运算符,它是一个表达式:
let a = (3 === 4 ? 5 : 6)
此时,您可能会想,如果一个语句只是执行副作用,那么控制台为什么要打印一个值呢?这是因为语句有一个完成值,对于if语句是对应分支的完成值,对于表达式语句(块中的5和6是什么),表达式的计算结果是什么。当您想在控制台中计算一个表达式并查看它产生了什么时,这主要是非常有用的,而不必每次都发出一个console.log()。
https://stackoverflow.com/questions/50330141
复制相似问题