当前位置: 首页 > 知识库问答 >
问题:

什么是?。JavaScript中的语法含义?

吴炎彬
2023-03-14

我尝试在浏览控制台中测试此语法,但遇到错误:

{cart?.widgets?.items.map(widget => (
        <div className="billing-details__box" key={widget.id}>
          <p className="m-0">{widget.name}</p>
          <p className="my-0">{widget.value} $</p>
        </div>
 ))}

对于上面的代码,我关心的是cart?.widgets?.items是否会引发任何错误。

共有1个答案

梁丘伟
2023-03-14

我无法确认这个语法是否正确。

它是正确的TypeScript代码,也是正确的JavaScript,这取决于运行它的引擎。Chrome(V8)已经支持这种语法(参见caniuse.com)。

在这里,您可以阅读更多关于将此语法添加到未来JS规范中的建议。

const user = {
  details: {
    name: "SpongeBob SquarePants"
  },
  repo: null
};
console.log(user.details.name) //=> "SpongeBob SquarePants"
console.log(user.repo.url) //=> undefined

它也适用于函数调用。例如,假设user.repo有一个值,我们知道它将是一个返回字符串的函数。但是,有时,正如上面所说,它可能不是一个函数。如果函数存在,我们可以执行以下操作来调用该函数,但是如果user.repo.url中的值不是函数,则代码不会引发错误:

console.log(user.repo?.url()) //=> undefined

没有可选的链接操作符?

您可以通过显式检查正在访问的属性链中每个对象属性的真实性来实现与可选链接操作符类似的行为。

function getItems_shortCircuit(obj) {
  return obj && obj.widgets && obj.widgets.items
}

function getItems_ternary(obj) {
  return obj 
    ? obj.widgets 
      ? obj.widgets.items 
        ? obj.widgets.items 
        : null 
      : null
    : null
}

let cart = {
  widgets: null
}

console.log(getItems_shortCircuit(cart)) //=> null

cart.widgets = {
  items: ["a", "b"]
}

console.log(getItems_ternary(cart)) //=> ["a", "b"]
 类似资料:
  • 问题内容: 我迅速在Google上找到了答案,但找不到/认为准确的搜索参数。 我正在自学Java,但似乎找不到某种语法的含义。 这意味着什么?我模糊地记得箭头括号与向量有关,但是根据上面的代码,我感觉到它与枚举有关。 任何帮助或澄清将不胜感激。谢谢。 问题答案: 这些称为泛型。 通常,这些在定义类,接口和方法时使 类型 (类和接口)成为参数。 与使用非泛型代码相比,使用泛型有很多好处,如Java教

  • 问题内容: 在以下JavaScript代码中,有一个美元符号()。这是什么意思? 问题答案: 您的代码段看起来像是来自一种流行的JavaScript库(jQuery,ProtoType,mooTools等)的引用方法。 在JavaScript中使用它并没有什么神秘之处。只是一个有效的JavaScript标识符。 JavaScript允许使用大写和小写字母,数字和。在旨在用于机器生成的变量(如)。

  • 问题内容: 我正在研究将数据存储在mongodb中的示例Go应用程序。这行代码(https://github.com/zeebo/gostbook/blob/master/context.go#L36)似乎访问了存储在大猩猩会话中的用户ID: 有人可以在这里给我解释一下语法吗?我知道这可以从会话中获取价值,但是接下来的部分是什么呢?为什么括号中的点后面是表达式?这是函数调用吗? 问题答案: 是,括

  • 本文向大家介绍JSP中的scriptlet是什么,其语法是什么?,包括了JSP中的scriptlet是什么,其语法是什么?的使用技巧和注意事项,需要的朋友参考一下 脚本可以包含任意数量的JAVA语言语句,变量或方法声明或在页面脚本语言中有效的表达式。 以下是Scriptlet的语法- 您可以编写与上述语法等效的XML,如下所示- 您编写的任何文本,HTML标记或JSP元素都必须在scriptlet

  • 问题内容: 在JavaScript中定义枚举的首选语法是什么?就像是: 还是有更好的成语? 问题答案: 从1.8.5开始,可以密封和冻结对象,因此将以上定义为: 要么 和瞧!JS枚举。 但是,这不会阻止您为变量分配不需要的值,这通常是枚举的主要目标: 确保类型安全性(使用枚举或其他方式)的程度更高的一种方法是使用诸如TypeScript或Flow之类的工具。 不需要引号,但为了保持一致性,我保留了

  • 问题内容: 我无法理解以下语法: 我看到SortedList类扩展了LinkedList。我只是不知道 手段。 到目前为止,我对它的理解是类型T必须是实现Comparable的类型…但这是什么? 问题答案: 泛型中的super与extends相反。并不是说可比对象的泛型类型必须是T的子类,而是要说它必须是T的超类。区别很重要,因为extends告诉您可以从类中得到什么(至少可以得到,也许是子类)。