在测试一些代码时,我遇到了一些以前并不完全熟悉的语法:
const obj = {
key: "tree",
value: "narra"
}
let condition = false;
var x = {...(condition && obj)};
console.log(x);
当我运行上述代码时,我想您可以传播布尔值。但是我还对其他原始数据(例如整数)甚至函数进行了测试:
let x = {...123};
console.log(x);
x = {...function(){}}
console.log(x)
我一直认为传播语法仅适用于数组,对象和其他可迭代对象(例如字符串),否则会导致语法错误。为什么在我的示例中有效,为什么它们返回void?
对象传播只是语法糖Object.assign
。Object.assign
将每个源值都转换为对象,就像尝试访问原始值的属性时会发生的情况一样。
但是,从基元创建的对象没有自己的属性:
console.log(Object.getOwnPropertyNames(false));
(它们怎么可能毕竟是原始体(它们的所有属性都来自其原型))
因此对最终结果并没有真正的影响。
对于函数,Object.assign
仅考虑可枚举的属性,而函数的默认属性均不可枚举。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句