【发布时间】:2013-09-04 06:30:04
【问题描述】:
我最近意识到,当我使用函数循环遍历数组并返回匹配项时,实际上我不需要在最后返回 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就会是undefined。所以我仍然可以使用 hasKey 作为布尔值。
但这算是好的风格吗?我意识到在 Java 这样的语言中,有一个“备份”返回是必要的,所以有些人把这个习惯带到了 JS 中。但我认为尽量减少不必要的退货是最理想的,尽管我不知道退货的实际成本。
当我查看以下问题的答案时,我对他为什么选择返回一个已经推送到所需数组的变量感到困惑。我认为他的返回是故意的,并且他不打算将返回的变量存储在任何地方。在函数末尾返回变量是否有好处(比如垃圾回收)?
【问题讨论】:
-
这是一个见仁见智的问题,但我对一个隐含的
undefined返回值表示满意,如果找到返回匹配值的函数。尽管您的函数名称hasKeyMatch()暗示返回将是true或false,而您返回的值与传递给函数的值相同。因此,在这种情况下(对我而言),如果您返回找到匹配项的数组中的索引,如果未找到则返回-1会更有意义。 (这是.indexOf()所做的。) -
我会有一个同名的函数返回
true或false。无论如何,不要将密钥作为结果返回 - 如果您寻找一个会评估为虚假的密钥怎么办?该函数会找到它,但会返回一些拒绝的结果。 -
我更喜欢返回 boolean 值(true/false)与 truelean 值(truthy/not truthy),除非后者有意义(即返回的值本身用于除其真/假性质之外的其他用途。如果返回的值预计可用于其他目的(并且不会改变真/假含义),则返回它。跨度>
-
对不起,我添加了一个未完善的示例,导致了离题的讨论。我并没有真正寻求实际示例代码的帮助,只是在概念/样式级别上寻求建议。
-
我不认为讨论离题了,因为返回
undefined是否有意义取决于函数的作用。所以我对函数更新版本的概念/风格建议是,我更喜欢最后一个return false,因为名称hasKeyMatch()意味着一个布尔返回。undefined对我来说只有在函数将返回相关值(如果找到)和undefined否则对我来说才有意义,而不是作为一种伪假。
标签: javascript