我试图在一点上理解ECMAScript 2015规范:对象的内部插槽.但这部分对我来说显得很不清楚,特别是这句话:
内部插槽对应于与对象关联并由各种ECMAScript规范算法使用的内部状态.
(它使用正确的语法吗?)有人能用英语解释这个概念吗?
到目前为止我能理解的是:
undefined这是我在《为什么 TypeScript 编译器通过两次检查来编译其可选链和空合并运算符?》末尾顺便问的一个后续问题。 正如 TypeScript 传奇人物jcalz在评论中指出的那样,它确实值得提出自己的问题。
// Why does the JavaScript treat
x?.y
// as
x === null || x === void 0 ? void 0 : x.y
// instead of
x === null || x === void 0 ? x : x.y
// ?
Run Code Online (Sandbox Code Playgroud)
当x == null,后者会保存null,而前者总是返回undefined。
现代浏览器?.本身就支持,因此我们可以测试此行为。
const test = () => {
console.log('undefined?.x\t\t==>\t', undefined?.x);
console.log('null?.x\t\t\t==>\t', null?.x);
console.log('null?.x === null\t==>\t', null?.x === null);
};
try {
eval('null?.x'); …Run Code Online (Sandbox Code Playgroud)