JavaScript中最快的属性注入?

JavaScript中最快的属性注入?,javascript,ecmascript-6,Javascript,Ecmascript 6,我有一个属性名数组=['prop1','prop2',…] 我需要将它们作为标准属性注入对象obj,而不指定任何值,即undefined 做这件事最有效的方法是什么 在创建仅使用这些属性的obj时会有什么不同吗?我希望您最快的选择是一个简单的循环,该循环向后运行到0: let obj = {}; for (let i = array.length - 1; i >= 0; --i) { obj[array[i]] = undefined; } 但是,除非您遇到了实际的性能问题,否

我有一个属性名数组=
['prop1','prop2',…]

我需要将它们作为标准属性注入对象
obj
,而不指定任何值,即
undefined

做这件事最有效的方法是什么

在创建仅使用这些属性的
obj
时会有什么不同吗?

我希望您最快的选择是一个简单的
循环,该循环向后运行到0:

let obj = {};
for (let i = array.length - 1; i >= 0; --i) {
    obj[array[i]] = undefined;
}
但是,除非您遇到了实际的性能问题,否则这很可能是过早的优化。

我希望您最快的选择将是一个简单的
,用于返回到0的
循环:

let obj = {};
for (let i = array.length - 1; i >= 0; --i) {
    obj[array[i]] = undefined;
}

但是,除非您遇到了实际的性能问题,否则这很可能是过早的优化。

您尝试过并比较过任何选项吗?^^^ Jeroen说。另外:为什么这可能很重要?我尝试了一种在循环中添加这些属性的正面方法,但认为可能会有更好的方法,可能是ES6中的某些内容。想不出在ES2016(ES6)中添加任何内容会更快。可能更简洁,但不能更快。虽然你可以从一个数组到一个对象进行解构赋值,但是你必须按名称列出这些道具,这样做是没有帮助的。我能想到的唯一其他选择将涉及函数调用,虽然函数调用非常快,但不可能与无聊的
for
循环相匹敌。可能真的很接近,但是…如果您关心性能,那么最好使用
null
初始化属性。我想初始值是未来值的占位符,空值更好,因为它更容易从中生成类。你试过并比较过任何选项吗?^^^ Jeroen说的。另外:为什么这可能很重要?我尝试了一种在循环中添加这些属性的正面方法,但认为可能会有更好的方法,可能是ES6中的某些内容。想不出在ES2016(ES6)中添加任何内容会更快。可能更简洁,但不能更快。虽然你可以从一个数组到一个对象进行解构赋值,但是你必须按名称列出这些道具,这样做是没有帮助的。我能想到的唯一其他选择将涉及函数调用,虽然函数调用非常快,但不可能与无聊的
for
循环相匹敌。可能真的很接近,但是…如果您关心性能,那么最好使用
null
初始化属性。我猜初始值是未来值的占位符,空值更好,因为编译器更容易从中生成类。很可能这不仅仅是过早的优化,而是误导的优化。循环的速度在很大程度上取决于运行时,我宁愿使用更标准的循环结构,更易于编译器优化。@Bergi:
for
带有简单计数器变量的循环是标准的。这是编译器优化的一个很容易的目标。但是哪一个呢<代码>用于(var i=array.length;i--;)
用于(var i=0;i@Bergi:这些都不会有任何问题。从优化的角度来看,这是一个非常“低效的结果”。现在,您希望
array.forEach(name=>{obj[name]=undefined;});
的运行速度也一样快。显然,在Chrome上运行速度不太快;Firefox可以管理它(在测量误差范围内),尽管如此:这真是太好了。很可能这不仅是过早的优化,而且是误导性的优化。循环的速度在很大程度上取决于运行时,我宁愿使用更标准的循环结构,更容易为编译器优化。@Bergi:
for
带有简单计数器变量的循环是标准的这是编译器优化的一个非常简单的目标。但是,对于(vari=array.length;i--;)
或(vari=0;i@Bergi:这些都不会有任何问题。从优化的角度来看,这是一个非常“低挂果实”。现在,您希望
array.forEach(name=>{obj[name]=undefined;});
的运行速度也一样快。显然,在Chrome上运行速度不太快;不过Firefox可以管理它(在测量误差范围内):这真是太好了。