使用默认第一个值的短路分配

dgo*_*dgo -1 javascript variable-assignment conditional-operator

我想要的是类似以下内容:

let x=32
let y=x===32 ?: 7;
Run Code Online (Sandbox Code Playgroud)

我现实生活中的例子更像是这样的:

inlineFunction(parameterWithLongNameIAmTesting===20000?parameterWithLongNameIAmTesting:anotherLongNameVariable);
Run Code Online (Sandbox Code Playgroud)

基本上使三元短路。我想y等于x当且仅当x=== 32。在上面的情况下,分配给的值y将是 32。但是,如果我分配x给等于 50 或其他任何值,则将y等于 7。

javascript 中有内置的方法可以做到这一点吗?

T.J*_*der 5

您可以使用32orx作为第二个操作数:

let y = x === 32 ? x : 7;
Run Code Online (Sandbox Code Playgroud)

关于:

我之所以寻找这个,是因为在我使用的现实生活中,实际的表达式如下所示:

let y = x === 32 ? x : 7;
Run Code Online (Sandbox Code Playgroud)

这样看起来真的很乱。

如果只是一团糟,你可以更清晰地格式化它(恕我直言)(SharedRory也提出了这个建议):

inlineFunction(parameterWithLongNameIAmTesting===20000?parameterWithLongNameIAmTesting:anotherLongNameVariable);
Run Code Online (Sandbox Code Playgroud)

或者,如果您不喜欢重复的长名称,您可以使用本地常量:

const x = parameterWithLongNameIAmTesting;
inlineFunction(x === 20000 ? x : anotherLongNameVariable);
Run Code Online (Sandbox Code Playgroud)

javascript 中有内置的方法可以做到这一点吗?

除了上面的条件运算符或if/之外没有其他任何东西else。您在评论中说您认为添加了一些内容。您可能会考虑使用可选链接 ( let y = something?.prop;) ,它会短路 if somethingisnullundefined,从而导致undefined错误,而不是错误something.prop。但这并不适用于此。

  • 最好使用 x,这样您就不必两次更改值 (2认同)
  • @SharedRory - 这是我的感觉......那么为什么我最终得到的答案是 32 ?!修复。 (2认同)