【问题标题】:Using an object as a storage for variables in JavaScript [closed]在 JavaScript 中使用对象作为变量的存储[关闭]
【发布时间】:2013-05-25 11:02:08
【问题描述】:

在某些情况下,我喜欢通过在变量名称前加上前缀来按上下文对变量进行分组,例如(示例 1)

var context_var1 = "value";
var context_var2 = "value";
var context_var3 = "value";
var context_var4 = "value";

现在我正要编写一个脚本,我查看了不同的声明样式,例如“only-one-var-keyword-style”(示例 2)

var context_var1 = "value",
    context_var2 = "value",
    context_var3 = "value",
    context_var4 = "value";

或“逗号优先样式”(示例 3)

var context_var1 = "value"
    , context_var2 = "value"
    , context_var3 = "value"
    , context_var4 = "value"
    ;

。但说实话,我真的最喜欢第一个例子。 个人我认为它是最易读的风格。 但是我想到了以下几点:

var context = {
    var1 : "value",
    var2 : "value",
    var3 : "value
};

然后我可以通过

console.log(context.var1);

那你怎么看。使用 JavaScript 对象作为某种变量存储是个好主意吗?

编辑: 由于它被请求了几次,下面是一个真实的例子,我将一些变量存储到一个对象中。

        /**
         *
         * Dom nodes which will be used a couple of times on various places.
         * Grouped into an object by context.
         *
         * @type {DOM nodes}
         *
         */
        var $dom = {
            document : $( document ),
            head : $( "head" ),
            body : $( "body" )
        };


        /**
         *
         * Calculate values based on the document height and
         * window width.
         *
         * @return {Object}
         *
         */
        var gauge = function() {

            var body_fontsize = parseInt($dom.body
                .css( "font-size" )
                .replace( "px", "" ), 10
            );

            var window_width = window.screen.availWidth;
            var document_height = $dom.document.height();
            var bline_count = Math.round( document_height / body_fontsize );
            var vline_count = Math.round( window_width / body_fontsize );

            return {
                width : window_width,
                height : document_height,
                baselines : bline_count,
                vertlines : vline_count
            };

        };

【问题讨论】:

  • 如果不存储一些数据,你认为 JS 对象是做什么用的?
  • @zerkms 当然可以。但声明简单变量的常用方式似乎“总是”类似于示例 1-3。
  • @Ube 也许在过程编程中。不在javascript中。
  • 这取决于...嗯...上下文。前三个我喜欢第一个,喜欢你。有时将对象中的变量分组是有意义的。例如,它可以更容易地将它们作为参数传递。其他时候,它们不作为一个单元使用。当你已经在一个函数里面时,你已经在一个共同的上下文中了。所以这真的取决于它们的用途,以及什么在概念上有意义。我对第四个选项的结论,保留在你的工具箱中,并在有意义的时候使用它。
  • +1 表示上述内容。向我们展示您的实际代码,而不是虚构的示例。

标签: javascript variables object coding-style


【解决方案1】:

正如所指出的,这就是对象的用途,它们将为您的数据命名空间提供可能性。

但是,使用对象可能有一个缺点:如果您的代码对性能至关重要,那么您应该依赖局部变量——尽管明智的选择通常是在对象中保存(组!)数据,然后分配它们到关键代码中的局部变量。

原因是属性查找比查找局部变量花费的时间更长。这意味着

for (var i = 0; i <= 100000; i++) {
    doSomething(myObj.subObject.anotherObject[i]);
}

如果您避免使用常量查找链,将执行得更快:

var actuallyNeeded = myObj.subObject.anotherObject;
for (var i = 0; i <= 100000; i++) {
    doSomething(actuallyNeeded[i]);
}

只要您的代码在性能方面不是很重要,当然,这是不必要的。

【讨论】:

    【解决方案2】:

    您要查找的词是命名空间。而且,在 JavaScript 中,Objects 非常适合它。

    绝对是最常用的命名空间声明语法。

    【讨论】:

    • 当局部变量组合成一个对象/单元时,它不是命名空间。通常,当像这样定义变量时,您已经在局部变量范围内,然后命名空间没有真正意义。
    • 我不同意。尽管如此,局部变量的注释是正确的。我看不出它与问题的相关性
    • 大多数情况下,您声明一组变量,它位于不存在变量名称冲突风险的本地范围内。所以不需要不同的命名空间。只有在将函数和变量添加到全局范围时才需要命名空间。但即便如此,创建本地未命名范围的闭包也同样有用。我同意这种语法有利于创建命名空间,但我认为这与问题无关。也许我们只是对这个问题的理解不同?
    • 将其缩小到 only 局部变量的痴迷是什么?反正我从来没提过这种事
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 2013-12-08
    相关资源
    最近更新 更多