javascript - 什么是 Javascript ?操作员?
问题描述
我正在为自己创建和回答这个问题,因为谷歌搜索“Javascript ?. Operator”没有提供有用的结果。
关于?的问题。要回答的操作员:
- 这个运算符叫什么?
- 运营商是如何工作的?
- 打字稿是否支持此运算符?
解决方案
- 这是空传播运算符(AKA 存在运算符)。使用运算符称为可选或条件链接。
- 当必须访问中间属性可能为空/未定义的对象的深度嵌套的正确值时,此运算符很有用。
例如考虑这个人对象
let person = {
name : {
first : "John",
last : "Doe"
},
age : 31
}
我将访问此人的姓氏
let lastName = person.name.last;
这一切都很棒,但是如果名称对象不存在怎么办?那么前面的代码行会抛出以下错误
未捕获的类型错误:无法读取未定义的属性“最后一个”
为了解决这个问题,必须检查 name 属性以确保它存在。这会将我们简单的一行代码变成以下代码
let lastName;
if(person.name){
lastName = person.name.last;
}
或者
let lastName = person && person.name && person.name.last
第一个选项只是麻烦,第二个选项也不会膨胀。(我个人认为语法令人困惑)作为解释,第二个选项是检查 person 是否真实,如果是,它将检查 person.name 是否真实,如果是 person.name.last 将保存到 lastName 中。
所以这里是 Null Propagation Operator 的魔力我可以将以上所有片段重写为
let lastName = person?.name?.last
现在,如果 person 或 name 为 null/undefined,lastName 将设置为 null/undefined,并且不会引发错误。对于高度嵌套的对象,这可以节省大量的错误检查和代码行。
- 从技术上讲,这只是一个提议的 ES7 更改(https://github.com/tc39/proposal-optional-chaining),但如果您在任何 chromium 浏览器的控制台中尝试它,它就可以工作。
从 3.7 开始,Typescript 支持可选链接 https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-7.html#optional-chaining
推荐阅读
- oracle - 如何在 Oracle NUMBER(23,20) 中考虑数据类型
- tile - 在 Godot tilemap 编辑器中选择非连续区域以创建图集
- python - Python 并行,信号量泄漏警告和无回溯的中止
- java - 将 Firestore 查询的结果保存到 ArrayList 并将每个结果添加到 CSV 文件
- node.js - 如何检测文件何时下载?
- c# - 尽管没有任何错误存在并且完美地自行构建和运行,但所有 C# 脚本都会产生错误
- api - 如何在 Flutter 中存储 API 密钥(2020 年 7 月)
- python-3.x - Python Soup Scarpe隐藏元素
- javascript - 通过ajax将值从localstorage发送到php
- c# - 如果在启动时打开它,如何最小化到托盘?C-夏普