为什么JS中的解构赋值可以用于数字?

10
作为标题所述,为什么这段代码不会抛出 SyntaxError?我认为你只能解构对象。

const {
  a,
  b
} = 0;

console.log(a, b); // undefined, undefined


1
为什么不呢? - VLAZ
顺便提一句,语法错误无法抛出异常,因为它不是应用程序执行期间可以抛出的运行时错误。如果引发了异常,则意味着代码在语法上是正确的并正在运行。 - armagedescu
1个回答

8

当您访问原始数据类型的属性时,将使用该原始数据类型的对象封装器来查看原型中是否存在这样的属性。例如,Number.prototype.toFixed 存在。因此,您可以理论上执行以下操作:

const {
  toFixed
} = 0;

console.log(toFixed);

Number.prototype.a = 'foo'; // just for example, please never do this
Number.prototype.b = 'bar';

const {
  a,
  b
} = 0;

console.log(a, b);

它不是无效语法,只是非常奇怪。


谢谢,现在你提到了这一点,我完全明白了。但看到它实际运行还是很奇怪的... - Luka Prebil Grintal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接