Javascript - 省略返回错误

时间:2013-09-03 21:48:52

标签: javascript

我最近意识到当我使用函数循环数组并返回匹配时,我实际上不需要在结尾返回false / null。

例如,如果我有:

*编辑的例子。原始示例来自我试图简化但忘记更改名称/上下文的函数。对困惑感到抱歉。这是一个更适合我问题标题的例子:

var hasKey = hasKeyMatch(key);
function hasKeyMatch(key) {
    for (var i = 0; i < array.length) {
        if (array[i].key === key) {
            return true;
        }
    }
};

我实际上并不需要返回false,就好像没有返回key一样,hasKey将是未定义的。所以我仍然可以使用hasKey作为布尔值。

但这被认为是好风格吗?我意识到在Java这样的语言中,“备份”返回是必需的,因此有些人将习惯带给了JS。但我认为尽量减少不必要的回报是理想的,但我不知道返回的实际成本。

当我看到下面问题的答案时,我很困惑他为什么选择返回已经推送到所需数组的变量。我认为他的回归是有意的,他并不打算将返回的变量存储在任何地方。在函数末尾返回变量是否有好处(比如垃圾收集)?

drawImage using toDataURL of an html5 canvas

4 个答案:

答案 0 :(得分:1)

我希望有一个方法可以返回一个布尔结果(即以ishas开头的方法/函数)返回truefalse。当然,JavaScript可以让您轻松返回undefined,还可以将真实性虚假分配给不是true或者false的值true。我觉得最好返回falsekey而不是key的值。在这里返回key有什么用?在调用函数之前,您已经拥有c的值。

很难说为什么作者选择返回states 将其推送到states数组中。也许{{1}}数组用于其他内容。

  

我意识到有一个&#39;备份&#39;返回是Java等语言的必需品,因此有些人将习惯带给了JS

我不完全确定你的意思;我不会发现自己是用Java做的。

答案 1 :(得分:1)

(忽略真相/虚假辩论)

我个人不介意在有意义的情况下返回undefined的函数,但我会考虑在最后添加return void 0;以表明它是有意的。功能结束时缺少一个返回语句告诉我它永远不会在那里击中。性能在这里不是真正的问题。

答案 2 :(得分:1)

不是因为你没有在方法语句中指定返回值function hasKeyMatch(key)吗? Java和其他语言通常要求您指定实际返回的内容。我说如果事情变得混乱,用“默认”返回语句结束语句总是好的做法。以防万一。一些奇怪的事情发生了,你的代码不能在一个特定的位置工作,它会捕获它并返回一些有效的东西,而不是那些可能会破坏你的代码的东西。

编辑:

如果这也是您正在寻找的,那么指定一个未定义的返回调用总是更好。如果有人正在阅读此代码,他们将无法分辨出实际上假设要返回的内容。这就是脚本语言的问题。

答案 3 :(得分:1)

这是代码可靠性的问题,如果方法名称建议结果,你应该总是返回false而不是undefined。

由于与代码风格有关的所有事情都不是对或错的问题(http://www.youtube.com/watch?v=zN-GGeNPQEg),但重要的是你要让别人了解你在做什么并避免愚蠢的错误。固体代码通过按预期行为避免了做蠢事的可能性。

例如:isA() && isB() || !isA() && !isB()可以更快地编写为isA() == isB()。 如果将这两个函数定义为一个(isA)返回false而另一个(isB)返回undefined,则第二个表达式将不会像人们怀疑的那样表现。

请参阅:http://jsfiddle.net/wDKPd/1/