扩展三元表达式

Extended Ternary expression

我知道您可以在 Javascript 中为 if - else 语句执行三元表达式,但是 else- else if- else 语句怎么样?我认为这肯定会得到支持,但我无法找到有关它的任何信息,也无法让它正常工作。

由于可读性,我不推荐它,但您可以嵌套三元运算符:

var y = (x == 0 ? "zero" : (x == 1 ? "one" : "other"));

这相当于:

var y;

if (x == 0) {
    y = "zero";
} else if (x == 1) {
    y = "one";
} else {
    y = "other";
}

与 Robby Cornelissen 的回答相反——如果你正确地格式化它(而不是写 PHP,那么可读性就没有问题,因为它使运算符与所有其他运算符相比是左关联的,从而弄乱了运算符具有该结构的语言):

var y =
  x == 0 ? "zero" :
  x == 1 ? "one" :
  "other";

编辑

What I was looking for is a shorter version of "if expression 1 is true, return expression 1. Else if expression 2 is true, return expression 2. Else return expression 3". Is there no clean way to do this?

有:expression1 || expression2 || expression3。 (如果你一开始就把这个放在你的问题中就好了。)这通常用于默认值:

var defaults = null;
function hello(name) {
  var displayName = name || (defaults && defaults.name) || "Anonymous";
  console.log("Hello, " + displayName + ".");
}

hello("George");
// => Hello, George.
hello();
// => Hello, Anonymous.
defaults = {};
hello();
// => Hello, Anonymous.
defaults.name = "You"
hello();
// => Hello, You.

但是,了解真实性的条件很重要。例如,如果您希望 ""0 是一个不需要被默认替换的有效值,代码将失败;只有当可能的非默认值集合恰好是真值集合时,这个技巧才有效,不多也不少。例如

function increment(val, by) {
    return val + (by || 1);      // BUG
}

increment(10, 4);
// => 14
increment(10, 1);
// => 11
increment(10);
// => 11
increment(10, 0);
// => 11                         <-- should be 10

在这种情况下你需要明确:

function increment(val, by) {
    return val + (typeof(by) === "undefined" ? 1 : by);
}

如果你做得好,可以扩展三元条件。虽然它变得凌乱。

var number = 5;
var power = 2;
var ans = Math.pow(number,power);
var suggest = (  ans == 5 ? 5 : ans == 10 ? 10 : ans == 15 ? 15 : ans == 25 ? "works" : null);
console.log(suggest);

我可能已经添加了很多,因为我在 phone 哈哈,但请在您的开发人员面板中尝试。