【问题标题】:Extended Ternary expression扩展三元表达式
【发布时间】:2015-01-20 01:20:59
【问题描述】:

我知道你可以在 Javascript 中为 if - else 语句做三元表达式,但是 else- else if- else 语句呢?我认为这肯定会得到支持,但我找不到任何关于它的信息,也无法让它工作,只是随便乱搞。

【问题讨论】:

  • 您必须向我们解释您所说的“else-else if-else”语句是什么意思。你的意思是“如果...否则如果...否则”?
  • +1 的想法。尽管就像我们都说过的那样,随着您添加的条件越多,可读性就会变得越来越困难。有时虽然常规的 if 是国王的选择。

标签: javascript ternary-operator


【解决方案1】:

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

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

【讨论】:

  • 这就是我想要的,谢谢。漂亮干净=)。 Upvote + 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";
}

【讨论】:

  • 让我再解释一下 你正常的三元运算符是:return express1 ? express1 : express2 在这种情况下,我们可以比较 2 个表达式,并根据第一个表达式的值决定返回哪一个。我正在寻找的是“如果表达式 1 为真,则返回表达式 1。否则,如果表达式 2 为真,则返回表达式 2。否则返回表达式 3”的较短版本。有没有干净的方法可以做到这一点?
【解决方案3】:

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

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

我可能已经添加了很多,因为我在我的手机上哈哈,但在你的开发者面板中尝试一下。

【讨论】:

    猜你喜欢
    • 2018-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    • 2012-11-29
    • 2013-06-20
    • 1970-01-01
    • 2016-09-26
    相关资源
    最近更新 更多