3

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

例如,如果我有:

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

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

我其实不需要return false,好像没有key的return,hasKey会是未定义的。所以我仍然可以使用 hasKey 作为布尔值。

但这被认为是好的风格吗?我意识到在 Java 这样的语言中,有一个“备份”返回是必要的,所以有些人把这个习惯带到了 JS 中。但我认为尽量减少不必要的退货是理想的,尽管我不知道退货的实际成本。

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

使用 html5 画布的 toDataURL 绘制图像

4

4 回答 4

1

我喜欢有预期返回布尔结果的方法(即,以isor开头的方法/函数has)返回trueor false。当然,JavaScript 使返回变得容易,并且undefined它还为非or的值分配了真假。我觉得最好返回或代替. 反正回到这里有什么用?在调用函数之前,您已经拥有 的值。truefalsetruefalsekeykeykey

很难说作者为什么选择返回c 推入states数组。也许该states数组用于其他用途。

我意识到在 Java 这样的语言中,有一个“备份”返回是必要的,所以有些人把这个习惯带到了 JS

我不完全确定您的意思是什么;我没有发现自己在 Java 中这样做。

于 2013-09-03T21:57:12.423 回答
1

(忽略真假辩论)

我个人不介意函数返回undefined有意义的地方,但我会考虑return void 0;在末尾添加以表明它是故意的。函数末尾缺少的 return 语句向我表明它永远不应该到达那里。性能在这里并不是真正的问题。

于 2013-09-03T22:09:55.460 回答
1

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

编辑:

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

于 2013-09-03T22:10:59.360 回答
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/

于 2013-09-03T22:30:04.917 回答