我刚刚{....0}
在朋友的代码中找到了。在控制台中评估它返回{}
(空对象)。
这是为什么?JavaScript中的4个点是什么意思?
我刚刚{....0}
在朋友的代码中找到了。在控制台中评估它返回{}
(空对象)。
这是为什么?JavaScript中的4个点是什么意思?
四个点实际上没有任何意义。...
是展开运算符,.0
是 的缩写0.0
。
将 0(或任何数字)传播到一个对象中会产生一个空对象,因此{}
.
对象文字中的三个点是扩展属性,例如:
const a = { b: 1, c: 1 };
const d = { ...a, e: 1 }; // { b: 1, c: 1, e: 1 }
最后一个带 0 的点是数字文字.0
,与 相同0.0
。因此:
{ ...(0.0) }
将数字对象的所有属性传播到对象中,但是由于数字没有任何(自己的)属性,因此您将返回一个空对象。
简而言之{...}
,javascript 中的扩展运算符扩展了一个对象/数组与另一个对象/数组。
因此,当 babelifier 尝试与另一个扩展时,它必须确定它是在尝试扩展数组还是对象。
在 的情况下array
,它迭代元素。
在 的情况下object
,它会遍历键。
在这种情况下,babelyfier 试图number
通过检查own property call
缺少的对象来提取键,number
因此它返回空对象。
扩展运算符{...}
允许迭代扩展。这意味着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} // {}
总之,与扩展运算符一起使用时可以以键值对形式处理的那些数据类型{...}
返回非空对象,否则返回空对象{}