我最近意识到当我使用函数循环数组并返回匹配时,我实际上不需要在结尾返回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。但我认为尽量减少不必要的回报是理想的,但我不知道返回的实际成本。
当我看到下面问题的答案时,我很困惑他为什么选择返回已经推送到所需数组的变量。我认为他的回归是有意的,他并不打算将返回的变量存储在任何地方。在函数末尾返回变量是否有好处(比如垃圾收集)?
答案 0 :(得分:1)
我希望有一个方法可以返回一个布尔结果(即以is
或has
开头的方法/函数)返回true
或false
。当然,JavaScript可以让您轻松返回undefined
,还可以将真实性和虚假分配给不是true
或者false
的值true
。我觉得最好返回false
或key
而不是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,则第二个表达式将不会像人们怀疑的那样表现。