为什么 {....0}评价为{}?

Mis*_*ist 78 javascript number-literal spread-syntax

我刚刚{....0}在朋友的代码中找到了.在控制台返回中评估它{}(空对象).

这是为什么?JavaScript中4个点的含义是什么?

Nik*_*xDa 87

四个点实际上没有任何意义....扩散运算符,.0是简称0.0.

因此,将0(或任何数字)传播到对象中会产生空对象{}.

  • 传播任何数字都会产生一个空对象. (11认同)
  • `传播0(或任何数字)产生一个空对象`不一定如果你在一个对象之外的任何其他地方传播一个数字,它会抛出一个错误,例如[... 0]抛出一个错误. (9认同)
  • @HiteshKumar在数组中传播不可迭代的对象确实会引发错误,但这与此问题无关.我指的是提到的物体传播.:) (2认同)
  • NikxDa我认为@HiteshKumar提出了重要观点.对于你的陈述成立的情况,最好更明确一些.`在对象文字中传播0(或任何数字)会产生一个空对象`包含更多有用的信息. (2认同)

Jon*_*lms 55

对象文字中的三个点是展开属性,例如:

  const a = { b: 1, c: 1 };
  const d = { ...a, e: 1 }; // { b: 1, c: 1, e: 1 }
Run Code Online (Sandbox Code Playgroud)

最后一个带0的点是一个数字文字.0是相同的0.0.因此:

 { ...(0.0) }
Run Code Online (Sandbox Code Playgroud)

将数字对象的所有属性传播到对象中,但是由于数字没有任何(自己的)属性,因此您将获得一个空对象.

  • @mist因为数字(和其他基元)在作为对象使用时会被"装箱"到对象中,之后会直接"取消装箱".因此`xk`会迷路. (3认同)
  • 数字没有任何_own enumerable_属性.但他们确实有财产. (3认同)

Raj*_*ari 6

简单来说{...},javascript中的spread运算符将一个对象/数组扩展为另一个.

因此,当babelifier尝试用另一个扩展时,它必须确定它是否正在尝试扩展数组或对象.

在这种情况下array,它迭代元素.

在这种情况下object,它迭代键.

在这种情况下,babelyfier试图number通过检查own property call缺少的Object 来提取密钥,number因此它返回空Object.