扩展三元表达

时间:2015-01-20 01:20:59

标签: javascript ternary-operator

我知道你可以在Javascript中为if - else语句做三元表达式,但是else else else if语句呢?我当然认为这肯定会得到支持,但我还没有找到任何有关它的信息,并且无法让它工作只是黑客攻击。

3 个答案:

答案 0 :(得分:3)

与Robby Cornelissen的回答相反 - 如果你正确地格式化(而不是编写PHP,那么可读性就没有问题,因为它与使用该结构的所有其他语言相比,使其与左边相关联使操作员搞砸了) :

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

修改

  

我正在寻找的是“如果表达式1为真,返回表达式1的缩短版本。否则,如果表达式2为真,则返回表达式2.否则返回表达式3”。有没有干净的方法来做到这一点?

有: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是一个不需要被默认值替换的有效值,则代码将失败;只有当可能的非默认值的集合恰好是真实值的集合时,这个技巧才有效,不多也不少。 E.g。

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);
}

答案 1 :(得分:2)

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

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";
}

答案 2 :(得分:1)

如果你很好,你可以扩展三元条件。但它会变得混乱。

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);

我可能已经添加了许多因为我在手机上哈哈但是在你的开发者面板中试试。