代码之家  ›  专栏  ›  技术社区  ›  EAMann

javascript对象定义条件-哪个更好?

  •  7
  • EAMann  · 技术社区  · 15 年前

    我遇到了两种不同的方法来定义/命名javascript中的对象和函数,它们在使用之前首先检查名称的存在性。问题是,我不知道哪一个更好(从速度和可用性的角度来看),而且在谷歌搜索中不可能使用布尔运算符来解决这个问题。

    我最常看到的第一个:

    var myNewObject = myNewObject ? myNewObject : function () {
        // Code goes here.
    };
    

    第二个看起来更简洁,但我只看到一两个地方,所以我不知道是否有一个标准,甚至一个名字:

    var myNewObject = myNewObject || function() {
        // Code goes here.
    };
    

    在功能上,它们都做同样的事情,而且它们似乎在我可以测试的每个浏览器中都能工作。我的问题是——哪个更好,为什么?另外,虽然第一个定义本质上是一个单行条件…第二个叫什么?

    5 回复  |  直到 11 年前
        1
  •  5
  •   Matt    15 年前

    我会选择后者,如果只是因为你键入 myNewObject 两次而不是三次。

    另外,虽然第一个定义本质上是一个单行条件…第二个叫什么?

    Short-circuit evaluation

        2
  •  5
  •   John Hartsock    15 年前

    我将使用第二个例子,它被描述为(最小eval)。它更简单,似乎更易读。

    这就像在多个浏览器中从onclick方法中获取事件一样。

    element.onclick = function (evt) {
      evt = evt || window.event
    }
    
        3
  •  2
  •   Community CDub    8 年前

    后者,它是 类似的 到C中的空联合运算符# ?? 以这种方式使用时

    见: Is there a "null coalescing" operator in JavaScript?

        4
  •  1
  •   Drew Wills    15 年前

    fwiw我更经常看到第二种方法,而且(对我来说)我觉得它更清晰、简洁和惯用。

        5
  •  0
  •   BenMorel Manish Pradhan    11 年前

    两种方法都有效。 但是我认为最优化的版本是简单地使用一个普通的if测试,比如:

    if(!myNewObject)
       myNewObject = ...
    

    在您的答案中建议的任何一种方法中执行,每次函数/对象已经定义时,都可能涉及不必要的重新分配。我的意思是,如果已经定义了MyNewObject,javascript运行时将不得不执行不必要的重新分配。 myNewObject = myNewObject (除非运行时不优化它)。

    在Mozilla网站上,他们建议使用简单的if, view this .