我应该在Javascript中使用多个变量还是单个对象?

时间:2018-05-14 00:01:43

标签: javascript performance variables javascript-objects memory-efficient

如果我想存储多个彼此相关的值,我应该使用多个变量还是单个对象?哪一个会更有效率?
注意:这些变量是在IIFE中定义的,因此它们不是全局变量。

示例:

// Option 1
let value1 = "Value 1";
let value2 = 2;
let value3 = true;

// Option 2
let value = {
    "1": "Value 1",
    "2": 2,
    "3": true
};

// Which one is more efficient?

2 个答案:

答案 0 :(得分:1)

编辑:OP实际上将这些变量放在一个立即调用的函数中,而一个函数已经是一个对象,因此只需将它们保存在那里。

原始答案:

简而言之,对象。

您是否将变量定义为全局变量? Global variables clutter up the global namespace and are slower to look up than local variables

由于您使用了let,因此没有变量提升,并且您的变量具有块范围,趋于更加整洁。任何与Array和全局(本地块除外)不同的执行上下文实际上是一个Object。因此,根据执行的上下文,在一个整洁的执行上下文中,如一个函数,一个闭包,一个"类的实例" (ES6,或用作类的函数),你已经有了所需的整洁。函数和类,扩展Object因此是Objects,继承Object.prototype。

Object.prototype在处理数据时很有用,例如Object.assign()对于浅层组合和合并非常有用。

您可以使用Object.keys()和Object.values()轻松访问Array.prototype,从而允许执行map,filter,reduce等许多操作。这是一个例子:

Object.filter = (obj, predicate) => Object.keys(obj)
    .filter( key => predicate(obj[key]))
    .reduce( (res, key) => (res[key] = obj[key], res), {} );

一般来说,对象是一个更好的主意,可以带来更广泛的可能性。当然,您也可以在需要时创建对象。

总结你的3个选择是Array,Object(包括函数,类,(nevermind blocks))或Global。要避免全局,对象可能会占据阵列。

答案 1 :(得分:0)

如果你想将任何值传递给你不需要处理整个json的任何方法,那么选项一会更有效,因为它为变量提供了更大的灵活性。确保正确命名变量。