2 次或多次 OR 运算符的简化版本是啥? [关闭]

Posted

技术标签:

【中文标题】2 次或多次 OR 运算符的简化版本是啥? [关闭]【英文标题】:What is the simplified version for OR opertaor for 2 or more times? [closed]2 次或多次 OR 运算符的简化版本是什么? [关闭] 【发布时间】:2021-04-09 08:33:18 【问题描述】:

||使用2次以上的简化版是什么

这不起作用。

`$e.ownerName || e.orgId.ownerName || ""`

【问题讨论】:

能否分享一下错误或者运行这段代码时发生了什么以及e对象的结构是什么 @Vikum Dheemantha TypeError: Cannot read property 'orgName' of undefined 您提供的代码不会尝试访问名为orgName 的属性,因此该错误与您提供的代码无关。请出示相关代码 您似乎误解了错误,因为您的代码中没有orgName 重新检查您的代码并确定您调用orgName 的位置。除此之外,您的代码中没有关于 OR 操作的错误。 是的,该变量不可用,所以它必须返回 null 并检查 OR 对吗? 【参考方案1】:

由于鸽子洞原理,我认为这不能进一步简化。 对于 N 个值,您将始终需要 N - 1 个运算符(AND 或 OR)。 在您的示例中,2 个运算符用于 3 个值。

此外,由于Short-Circuit evaluation,编译器将自动返回第一个等于 true 的值并停止评估。 所以默认是优化的。

【讨论】:

【参考方案2】:

嗯..看起来不错..

请记住,“OR”运算符只有在前一个值为 false、空或 null 时才会返回下一个值。

您正在检查什么值?即,如果您登录到控制台 (console.log(e.ownerName, e.orgId.ownerName),您会得到什么价值?

【讨论】:

TypeError: Cannot read property 'orgName' of undefined @zergski $e.ownerName || e.orgId.ownerName 它工作正常,但如果两者都没有找到它会失败 'orgName'?看起来像语法错误?你确定错误来自那些行吗?【参考方案3】:

通过这种语法解决

e.orgId ? e.orgId.orgName : e.orgName || ""

【讨论】:

heh.. 好吧.. 如果您仍然只想使用“OR”运算符以获得更好的语法,您可以跳过 orgId 条件并在其余部分执行 ||..【参考方案4】:

看起来您正在尝试应用“守卫模式”(实际上使用逻辑 AND (&&) 与 OR (||)) 或本质上进行空检查,并在某些情况下最终提供一个备用值。

如果你想要这个后备顺序的值

    e.ownerName e.orgId.ownerName "":

您可以使用保护(空检查)模式和回退

e.ownerName || (e.orgId && e.orgId.ownerName) || ''

或者,如果您的构建环境支持它,请使用Optional Chaining operator 来简化它(null 检查)。

e.ownerName || e.orgId?.ownerName || ''

【讨论】:

以上是关于2 次或多次 OR 运算符的简化版本是啥? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

2021-05-08

Python:使用jsonpickle无法两次或多次打印同一个对象。

正则表达式的限定符或运算符字符类元字符贪婪/懒惰匹配

angular 2 subscribe shareService 工作两次或多次

14Cookie

多次打开和关闭 SQL 连接有多糟糕?确切的效果是啥?