【问题标题】:What does ?? ternary operator mean using react and javascript? [duplicate]有什么作用??三元运算符意味着使用反应和javascript? [复制]
【发布时间】:2022-01-26 21:35:14
【问题描述】:

我有如下代码,

const output = (data?.item?.someItem?.count ?? 0) === 0;

在这种情况下输出的值是什么?在上面的意思是。谁能帮我理解这行代码。

我是编程新手。谢谢。

【问题讨论】:

标签: javascript


【解决方案1】:

“可选链接运算符”?. 获取对象的属性(如果存在),“空值合并运算符”?? 的行为与 || 运算符非常相似:如果存在,则返回第一个操作数不是 nullundefined ,否则返回第二个。

|| 的行为略有不同:如果第一个操作数为“假”,它将返回第二个操作数(即0false 也会触发返回第二个操作数)。

您可以在此处找到更多详细信息:MDM Web Docs - Operators

【讨论】:

  • 我认为 ?? 的另一种方式?
  • 当然 - ?‍♂️ - 我写的时候搞混了!相应地更正了帖子。
【解决方案2】:

首先,正如已经指出的,这不是 React 特有的,而是普通的 JavaScript 语法。

让我们分解一下。

可选链接?

const result1 = data?.item?.someItem?.count

可选的链接运算符 (?.) 使您能够读取位于连接对象链深处的属性值,而无需检查链中的每个引用是否有效。

因此,即使 dataitemsomeItem 未定义或为 null,您仍然可以使用此语句而不会产生错误,但您只会得到一个 undefined 值。

在文档here 中了解更多信息。

空值合并运算符 (??)

const result2 = result1 ?? 0

docs中所述:

nullish 合并运算符 (??) 是一个逻辑运算符,当其左侧操作数为 null 或未定义时返回其右侧操作数,否则返回其左侧操作数。

在您的情况下,如果element 为空或未定义,则表达式将返回0,否则返回element

最终输出:严格等式比较

const output = result2 === 0

如果result2 严格等于数值0,则表达式的计算结果为真。另请阅读文档here

【讨论】:

    猜你喜欢
    • 2020-09-08
    • 2016-11-07
    • 2012-05-02
    • 2023-03-26
    • 2015-12-09
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    • 1970-01-01
    相关资源
    最近更新 更多