【问题标题】:code-style: Is inline initialization of JS objects ok?代码风格:JS对象的内联初始化可以吗?
【发布时间】:2010-02-03 06:07:36
【问题描述】:

我经常发现自己使用内联初始化(参见下面的示例),尤其是在我不知道哪个 case 循环会命中时的 switch 语句中。我发现它比 if 语句更容易阅读。

但这是一种好的做法还是会产生副作用或性能下降?

for (var i in array) {
    var o = o ? o : {};  // init object if it doesn't exist
    o[array[i]] = 1;     // add key-values
}

有没有什么好的网站可以获取编码风格提示?

【问题讨论】:

    标签: javascript coding-style


    【解决方案1】:

    另一个常用的模式是使用Logical OR || 运算符(比您的三元恕我直言更具可读性):

    //...
    var obj = o || {};
    

    如果第一个操作数的计算结果为false,则此运算符将返回其第二个操作数,否则将返回第一个操作数。

    当您期望一个对象时使用它是安全的,因为这些 falsy 值是 nullundefinedNaN0,一个零长度字符串,以及当然false.

    我发现在函数参数上设置 默认值 很有用,当然,当函数期望任何 falsy 值有效时:

    function test (arg1) {
      arg1 = arg1 || "default value";
      //..
    }
    

    【讨论】:

    • 很棒的提示,我建议观看video.yahoo.com/watch/111593(有四个部分)以了解其他很棒的提示。这是 Douglas Crockford 关于 JavaScript 的系列文章。
    【解决方案2】:

    为什么不直接在循环外声明呢?

    var o = {};
    for (var i in array) {
      o[array[i]] = 1;
    }
    

    否则不,我不认为你在做什么有问题。

    【讨论】:

      猜你喜欢
      • 2019-12-01
      • 1970-01-01
      • 2020-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-26
      • 1970-01-01
      相关资源
      最近更新 更多