从javascript函数提前返回引用的最佳方法

时间:2010-03-04 11:37:36

标签: javascript

假设我们有以下形式的功能:

function getReferenceToFoo( idName )
{
    if( ! document.getElementById( idName ) )
    {
        return;
    }
    ... 
    // else return reference to element normally
}

通过返回类型指示失败的最佳方法是什么?在我看来,我可以做以下其中一件事:

  1. 只是'返回'(如上所述)
  2. 返回'null'
  3. 返回'undefined'
  4. 哪种方法最好?为什么?

3 个答案:

答案 0 :(得分:4)

在JavaScript中,所有函数都会返回,即使您没有明确地让它们返回。如果没有return语句,函数将返回undefined。但是有一个例外。如果使用new语句,该函数将返回this的实例。

所以:

function doFoo()
{
    // do nothing
}

function doFoo()
{
    return;
}

function doFoo()
{
    return undefined;
}

与JavaScript引擎完全相同。

我真的不建议在JavaScript中使用null作为返回值。 null是一个对象,进行类型检查会导致奇怪的逻辑。如果您使用null作为回报,则最好将if()中的表达式更改为更明确。

我建议仅从预期返回值为某种对象的函数返回null作为失败值。如果预期的返回值是某种原始的,我会考虑undefined

foo = getReferenceToFoo('myID');
// foo might be a reference or null
if (null !== foo) {
    // do things
}

但说实话,我不知道你为什么要这样做。如果找不到任何内容,方法document.getElementById将返回null

我知道这是一个反模式,但实际上我确实使用了:

var myElmnt;
if ((myElmnt = document.getElementById('myId')))
{
    // do stuff with myElmnt
}

是的,我知道,我会在地狱和所有人中燃烧。

答案 1 :(得分:1)

如果你想返回一些东西,我会返回null,因为null的目的是指示一个空内容。

Wikipedia for Null

  

Null是一个特殊的指针值(或其他类型的对象引用),用于表示指针故意不指向(或引用)对象。

否则,如果你想要精确或失败中断,你可能想要抛出异常。

答案 2 :(得分:-2)

返回false或没有。如果您正在执行,return只会为空:

foo = getReferenceToFoo('myID');
if (foo) {
    // do things
}