W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
NOTE: This plugin is included in @babel/preset-env, in ES2020
JavaScript
const obj = {
foo: {
bar: {
baz: 42,
},
},
};
const baz = obj?.foo?.bar?.baz; // 42
const safe = obj?.qux?.baz; // undefined
// Optional chaining and normal chaining can be intermixed
obj?.foo.bar?.baz; // Only access `foo` if `obj` exists, and `baz` if
// `bar` exists
// Example usage with bracket notation:
obj?.["foo"]?.bar?.baz; // 42
JavaScript
const obj = {
foo: {
bar: {
baz() {
return 42;
},
},
},
};
const baz = obj?.foo?.bar?.baz(); // 42
const safe = obj?.qux?.baz(); // undefined
const safe2 = obj?.foo.bar.qux?.(); // undefined
const willThrow = obj?.foo.bar.qux(); // Error: not a function
// Top function can be called directly, too.
function test() {
return 42;
}
test?.(); // 42
exists?.(); // undefined
JavaScript
const obj = {
foo: {
bar: {
baz: class {
},
},
},
};
const baz = new obj?.foo?.bar?.baz(); // baz instance
const safe = new obj?.qux?.baz(); // undefined
const safe2 = new obj?.foo.bar.qux?.(); // undefined
const willThrow = new obj?.foo.bar.qux(); // Error: not a constructor
// Top classes can be called directly, too.
class Test {
}
new Test?.(); // test instance
new exists?.(); // undefined
Added in: v7.8.0
JavaScript
const obj = {
foo: {
bar: {},
},
};
const ret = delete obj?.foo?.bar?.baz; // true
pnpm add --save-dev @babel/plugin-proposal-optional-chaining
babel.config.json
{
"plugins": ["@babel/plugin-proposal-optional-chaining"]
}
Shell
babel --plugins @babel/plugin-proposal-optional-chaining script.js
JavaScript
require("@babel/core").transformSync("code", {
plugins: ["@babel/plugin-proposal-optional-chaining"],
});
boolean, defaults to false.
When true, this transform will pretend document.all does not exist, and perform loose equality checks with null instead of strict equality checks against both null and undefined.
?? Consider migrating to the top level noDocumentAll assumption.
babel.config.json
{
"assumptions": {
"noDocumentAll": true
}
}
In
JavaScript
foo?.bar;
Out (noDocumentAll === true)
JavaScript
foo == null ? void 0 : foo.bar;
Out (noDocumentAll === false)
JavaScript
foo === null || foo === void 0 ? void 0 : foo.bar;
You can read more about configuring plugin options here
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: