为什么 {。 . . .0} 评估为 {}?
Why does {. . . .0} evaluate to {}?
我刚刚在朋友的代码中找到{....0}
。在控制台中评估它 returns {}
(空对象)。
这是为什么? JavaScript中的4个点是什么意思?
四个点其实没有任何意义。 ...
是spread operator,.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 中的扩展运算符将一个 object/array 扩展到另一个
因此,当 babelifier 尝试扩展一个与另一个时,它必须确定它是在尝试扩展一个数组还是一个对象。
在 array
的情况下,它遍历元素。
在 object
的情况下,它遍历键。
在这种情况下,babelyfier 试图通过检查 number
缺少的对象 own property call
来提取 number
的密钥,因此它 returns 是空对象。
展开运算符{...}
允许迭代展开。这意味着可以扩展那些可以以 key-value
对形式定义的数据类型。在 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"}
在数组方面,由于它以索引为键,所以这里将arr1
的元素'1'替换为'3',因为它们在不同数组中具有相同的索引。
字符串过于分散运算符 returns 非空对象。由于字符串是字符数组,因此它将字符串视为数组。
let obj4 = {...'hi',...'hello'} // {0: "h", 1: "e", 2: "l", 3: "l", 4: "o"}
let obj5 = {...'y',...'x'} // {0: "x" }
但对于其他原始数据类型,它 return 空对象
有数字
let obj6 = { ...0.0, ...55} // {}
使用布尔值
let obj7 = { ...true, ...false} // {}
总之,当与扩展运算符{...}
一起使用时,可以以键值对的形式处理的那些数据类型 {...}
returns 非空对象,否则它 returns 空对象 {}
我刚刚在朋友的代码中找到{....0}
。在控制台中评估它 returns {}
(空对象)。
这是为什么? JavaScript中的4个点是什么意思?
四个点其实没有任何意义。 ...
是spread operator,.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 中的扩展运算符将一个 object/array 扩展到另一个
因此,当 babelifier 尝试扩展一个与另一个时,它必须确定它是在尝试扩展一个数组还是一个对象。
在 array
的情况下,它遍历元素。
在 object
的情况下,它遍历键。
在这种情况下,babelyfier 试图通过检查 number
缺少的对象 own property call
来提取 number
的密钥,因此它 returns 是空对象。
展开运算符{...}
允许迭代展开。这意味着可以扩展那些可以以 key-value
对形式定义的数据类型。在 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"}
在数组方面,由于它以索引为键,所以这里将arr1
的元素'1'替换为'3',因为它们在不同数组中具有相同的索引。
字符串过于分散运算符 returns 非空对象。由于字符串是字符数组,因此它将字符串视为数组。
let obj4 = {...'hi',...'hello'} // {0: "h", 1: "e", 2: "l", 3: "l", 4: "o"}
let obj5 = {...'y',...'x'} // {0: "x" }
但对于其他原始数据类型,它 return 空对象
有数字
let obj6 = { ...0.0, ...55} // {}
使用布尔值
let obj7 = { ...true, ...false} // {}
总之,当与扩展运算符{...}
一起使用时,可以以键值对的形式处理的那些数据类型 {...}
returns 非空对象,否则它 returns 空对象 {}