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