【问题标题】:Question mark after parameter as in obj.val?.prop [duplicate]参数后的问号,如 obj.val?.prop [重复]
【发布时间】:2020-12-22 15:07:53
【问题描述】:

我在这样的代码条件行中遇到了someObject.arrParam?.length。那是什么语法?那个问号的东西怎么叫?我知道一个可选运算符,它用于函数中的参数。这是它的用法变化吗?以前没见过。

【问题讨论】:

标签: javascript


【解决方案1】:

这在 JavaScript 中称为 可选链接。它允许钻孔 在不引发空异常的情况下关闭对象。

例如:尝试运行以下代码 sn-p,然后取消注释该行并运行它以了解一个工作示例。

let employeeA ={ name: "Dane", address : { city:"London"}}
let employeeB ={ name: "John"}

console.log(employeeA.address.city)
// console.log(employeeB.address.city) <----  this will raise an error
console.log(employeeB.address?.city) // <--- this wont

这是在最新的 ESNext 迭代中作为新功能引入的。

NodeJS 支持:https://node.green/#ES2020-features-optional-chaining-operator-----

当前浏览器支持:https://caniuse.com/#feat=mdn-javascript_operators_optional_chaining

更多细节在这里: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining

【讨论】:

    【解决方案2】:

    这称为Optional Chaining(或条件链接),如果arrParamundefinednull,则基本上会将整个表达式计算为undefined

    【讨论】:

      【解决方案3】:

      它叫做“Conditional (ternary) operator”。

      result=condition?ifTrue:ifFalse

      x=(y&gt;10)?100:1中,如果y>10,x设置为100,否则,x设置为1。

      相当于:

      if(y>10) x=100;
      else     x=  1;
      

      【讨论】:

      • 不,不是这样。
      猜你喜欢
      • 2015-10-05
      • 1970-01-01
      • 1970-01-01
      • 2020-05-03
      • 2021-05-04
      • 2017-05-01
      • 2016-08-28
      • 2018-06-15
      • 2019-05-02
      相关资源
      最近更新 更多