80

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

这是为什么?JavaScript中的4个点是什么意思?

4

4 回答 4

90

四个点实际上没有任何意义。...展开运算符.0是 的缩写0.0

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

于 2018-12-25T11:40:25.833 回答
56

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

  const a = { b: 1, c: 1 };
  const d = { ...a, e: 1 }; // { b: 1, c: 1, e: 1 }

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

 { ...(0.0) }

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

于 2018-12-25T11:42:35.627 回答
6

简而言之{...},javascript 中的扩展运算符扩展了一个对象/数组与另一个对象/数组。

因此,当 babelifier 尝试与另一个扩展时,它必须确定它是在尝试扩展数组还是对象。

在 的情况下array,它迭代元素。

在 的情况下object,它会遍历键。

在这种情况下,babelyfier 试图number通过检查own property call缺少的对象来提取键,number因此它返回空对象。

于 2018-12-26T11:51:19.933 回答
0

扩展运算符{...}允许迭代扩展。这意味着key-value可以扩展那些可以以对形式定义的数据类型。就我们而言,Object我们将键值对称为 Object 属性,它是值,而就我们而言,arrays我们可以将索引视为键,将数组中的元素视为它的值。

let obj = { a: 4, b: 1};
let obj2 = { ...obj, c: 2, d: 4}; // {a: 4, b: 1, c: 2, d: 4}

let arr1 = ['1', '2'];
let obj3 = { ...arr1, ...['3']}; // {0: "3", 1: "2"}

就数组而言,因为它以索引为键,所以这里将元素 '1' 替换为arr1'3',因为它们在不同的数组中具有相同的索引。

使用字符串太展开运算符返回非空对象。由于字符串是一个字符数组,因此它将字符串视为一个数组。

let obj4 = {...'hi',...'hello'}   // {0: "h", 1: "e", 2: "l", 3: "l", 4: "o"}
let obj5 = {...'y',...'x'}   // {0: "x" }

但是对于其他原始数据类型,它返回空对象

有数字

let obj6 = { ...0.0, ...55} // {}

带布尔值

let obj7 = { ...true, ...false} // {}

总之,与扩展运算符一起使用时可以以键值对形式处理的那些数据类型{...}返回非空对象,否则返回空对象{}

于 2019-01-05T05:25:55.410 回答