我刚刚在朋友的代码中找到了{....0}
。在控制台中评估它会返回{}
(空对象)。
那是为什么? JavaScript中4个点的含义是什么?
答案 0 :(得分:87)
四个点实际上没有任何意义。 ...
是spread operator,而.0
是0.0
的缩写。
将0(或任何数字)散布到一个对象中会产生一个空对象,因此为{}
。
答案 1 :(得分:55)
对象文字中的三个点是 spread属性,例如:
const a = { b: 1, c: 1 };
const d = { ...a, e: 1 }; // { b: 1, c: 1, e: 1 }
最后一个带0的点是数字文字.0
与0.0
相同。因此:
{ ...(0.0) }
将数字对象的所有属性传播到该对象中,但是,由于数字没有任何(自己的)属性,您将获得一个空对象。
答案 2 :(得分:6)
简单来说,JavaScript中的{...}
传播算子将一个对象/数组扩展为另一个。
因此,当babelifier尝试彼此扩展时,它必须确定是要扩展数组还是对象。
对于array
,它会遍历元素。
对于object
,它会遍历键。
在这种情况下,小宝贝正在尝试通过检查number
缺少的对象own property call
来提取number
的密钥,以便它返回空对象。
答案 3 :(得分: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"}
就数组而言,因为它以索引为键,所以这里用{3'替换了arr1
的元素'1',因为它们在不同的数组中都有相同的索引。
如果字符串过于分散,运算符将返回非空对象。由于字符串是字符数组,因此将字符串视为数组。
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} // {}
最后,与散布运算符{...}
一起使用时,可以键-值对形式处理的那些数据类型返回非空对象,否则返回空对象{}