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 DheemanthaTypeError: 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 运算符的简化版本是啥? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
Python:使用jsonpickle无法两次或多次打印同一个对象。