JavaScript 速记三元运算符

我知道在 PHP 5.3中没有使用这种冗余的三元运算符语法:

startingNum = startingNum ? startingNum : 1

... 我们可以在适用的情况下使用三元运算符的简写语法:

startingNum = startingNum ?: 1

我还知道 JavaScript 中的三元运算符:

startingNum = startingNum ? startingNum : 1

但是有没有速记法?

88896 次浏览
var startingNumber = startingNumber || 1;

像这样的东西,你正在寻找什么,它默认,如果未定义?

var foo = bar || 1; // 1
var bar = 2;
foo = bar || 1;     // 2

顺便说一下,这适用于很多场景,包括对象:

var foo = bar || {}; // secure an object is assigned when bar is absent

||将返回它遇到的第一个真值,因此可以用作聚合运算符,类似于 C # 的 ??

startingNum = startingNum || 1;

是的,有:

var startingNum = startingNum || 1;

一般来说,expr1 || expr2的工作方式如下(正如 文件所提到的) :

如果可以转换为 true,则返回 expr1; 否则返回 expr2。因此,当与 Boolean值一起使用时,如果其中一个操作数是 true,则 ||返回 true; 如果两个操作数都是 false,则返回 false

var startingNum = startingNum || 1;

在这种情况下,可以使用 OR 运算符。

以上答案是正确的:

startingNum = startingNum ? otherNum : 1

可以表达为

startingNum = otherNum || 1

这里没有讨论的另一种情况是,如果不匹配时,您希望该值返回 false。JavaScript 的简写是:

startingNum = startingNum ? otherNum : 0

但它可以表达为

startingNum = startingNum && otherNum

我只是想谈谈另一种情况,以防其他人寻找一个更普遍的答案。

startingNum = startingNum || 1

如果条件为 null,如

startingNum = startingNum ? startingNum : null

你可以用 & &

startingNum = startingNum && startingNum

使成为三元组,如:

boolean_condition ? true_result : false_result

在 javascript 中,你可以:

(boolean_condition && true_result ) || false_result;

Example:

(true && 'green') || 'red';
=> "green"
(false && 'green') || 'red';
=> "red"

在大多数现代浏览器中,你现在可以使用:

startingNum ??= 1;

这将只改变 startingNum,如果它是 nullundefined

见: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_nullish_assignment

随着 ES2020的增加:

w/Nullish 聚合: const difficulty = var?.nest[i]?.prop ?? false

旧手术: const difficulty = var.nest[i].prop ? var.nest[i].prop : false

属性之前的问号将首先检查对象是否存在(如果您不确定它是否存在: 就像在 API 数据中一样) ,如果缺少一个对象,它将返回 undefined

??检查左边的值是 null还是 undefined,如果是,则返回右边提供的值。

您可以使用公认的答案,但是它并不理想,因为它在与 bools 一起使用时会断开,如果默认为 true,它的计算结果总是为 true->

var undefinedVal: boolean;
var trueVal = true;
var falseVal = false;

角度模板:

Value : \{\{ undefinedVal || true }} -> true
Value : \{\{ trueVal || true }} -> true
Value : \{\{ falseVal || true }} -> true?

因此,在使用 bools 时使用长路:

Value : \{\{ (val != null) ? val : true }}

还要注意类型脚本和 C # (我认为) ,当使用带字符串串联的三元组时,它必须在括号中->

console.log("Value :" + ((val != null) ? val : true));