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

时间:2010-07-09 17:36:58

标签: javascript object

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

我经常看到的第一个:

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

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

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

从功能上讲,它们都做同样的事情,它们似乎都适用于我可以测试的每个浏览器。我的问题是 - 这更好,为什么?此外,虽然第一个定义基本上是单行条件......第二个定义是什么?

5 个答案:

答案 0 :(得分:5)

我会使用第二个例子,它描述为(Minimum Eval)。它更简单,更具可读性。

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

element.onclick = function (evt) {
  evt = evt || window.event
}

答案 1 :(得分:5)

如果只输入myNewObject两次而不是三次,我会选择后者。

  

此外,虽然第一个定义基本上是单行条件......第二个定义是什么?

Short-circuit evaluation

答案 2 :(得分:2)

后者,当以这种方式使用时,它与c#??中的null coalesce运算符类似

请参阅:Is there a "null coalescing" operator in JavaScript?

答案 3 :(得分:1)

FWIW我更经常地看到第二种方法,而且(就我而言)我觉得它更清晰,更简洁,更具惯用性。

答案 4 :(得分:0)

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

if(!myNewObject)
   myNewObject = ...

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

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