Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我应该在Javascript中使用多个变量还是单个对象?_Javascript_Performance_Variables_Javascript Objects_Memory Efficient - Fatal编程技术网

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

我应该在Javascript中使用多个变量还是单个对象?,javascript,performance,variables,javascript-objects,memory-efficient,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?

如果我想存储多个相互关联的值,我应该使用多个变量还是单个对象?哪一个更有效?
注:这些变量是在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?

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

原始答复:

简而言之,就是对象

您是否将变量定义为全局变量?

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

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

您可以通过使用Object.keys()和Object.values()轻松访问Array.prototype,从而允许许多操作,如映射、筛选和减少。以下是一个例子:

Object.filter = (obj, predicate) => Object.keys(obj)
    .filter( key => predicate(obj[key]))
    .reduce( (res, key) => (res[key] = obj[key], res), {} );
所以,一般来说,Object是一个更好的想法,它带来了更广泛的可能性。当然,您也可以在需要时创建对象


总结一下,您可以选择数组、对象(包括函数、类、(无需指定块))或全局。要避免使用全局变量,对象可能会主导数组。

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

对象不是JSON,值[“1”]是不需要处理整个对象的原子访问(单个操作)。我在IIFE中定义这些变量,因此它们不是全局变量。包含IIFE的函数是对象。因此,你的问题实际上是IIFE和“香草”对象,你已经需要IIFE了,所以就把它们放在那里。这到底是什么意思?这意味着你可以使用所有的对象。原型也有一个函数。如果我真的不需要操纵对象内的数据呢?在这种情况下,变量更好吗?我只是用它来存储一些数据。