Optional Chaining 解决的问题是重复且无意义的判空,之所以说无意义,是对业务来说它不是必需的,但不判空,程序直接就挂了,比如: let x = foo.bar.baz();
这里的访问链路上 使用 Optional Chaining 修改后: let x = foo?.bar.baz();
这里 Optional Chaining 在这里表示,如果 作用范围需要注意的是,这里只对 所以可以这样来修正: let x = foo?.bar?.baz();
这样可以保障 Opptoinal call对于方法也同样适用。 async function makeRequest(url: string, log?: (msg: string) => void) {
log?.(`Request started at ${new Date().toISOString()}`);
// roughly equivalent to
// if (log != null) {
// log(`Request started at ${new Date().toISOString()}`);
// }
const result = (await fetch(url)).json();
log?.(`Request finished at at ${new Date().toISOString()}`);
return result;
}
Optional element access数组也是对象,只不是特殊的对象,通过数字索引作为属性来访问。所以 Optional Chaining 也可作用于数组元素的访问,此时就体现了 /**
* Get the first element of the array if we have an array.
* Otherwise return undefined.
*/
function tryGetFirstElement<T>(arr?: T[]) {
return arr?.[0];
// equivalent to
// return (arr === null || arr === undefined) ?
// undefined :
// arr[0];
}
和
|
The text was updated successfully, but these errors were encountered: |