Javascript 函数返回不同类型的值是否有害

Javascript 函数返回不同类型的值是否有害,javascript,type-conversion,Javascript,Type Conversion,我想知道为函数返回不同类型的值是否被认为是一种错误的做法。考虑代码: function getInterval() { var interval = getIntervalValueFromLocalStorage(); if (interval < 0) { return false; } return interval; } 在这种情况下: function getInterval() { return getIntervalFromLocalStorage()

我想知道为函数返回不同类型的值是否被认为是一种错误的做法。考虑代码:

function getInterval() {
 var interval = getIntervalValueFromLocalStorage();
 if (interval < 0) {
  return false;
 }
 return interval;
}
在这种情况下:

function getInterval() {
    return  getIntervalFromLocalStorage();
}

我将不得不检查间隔是否小于0,并且它看起来不是很整洁

对此没有明确的客观答案,但以下是我的看法

这里基本上有两个考虑因素:性能和可读性/可维护性

对于性能而言,始终采用相同的参数类型并返回相同的类型可能会产生很大的影响(例如:)。在实践中,这些差异通常是可以忽略的,除非您需要快速代码

关于可维护性,一致的返回值也有帮助(在我看来)。我做的一个例外是返回null,这是我在您的情况下会做的

我建议在合理可能的情况下避免使用这些。例如,当没有用户登录时,getCurrentUser()函数可以返回AnonymousUser实例,而不是null。这避免了大量的空检查和与忘记它们相关的bug

简而言之:尽可能避免返回不同的类型。

从一个函数返回不同类型的值是一种不好的做法吗

是的,当然是。虽然在某些情况下是必要的,但它使代码的语义推理变得更加困难,这对于可维护性和正确性非常重要。这也使得编译器更难进行优化


在您的特定情况下,当间隔id无效时,您应该返回
0
,而不是
false

这与使用null一样难看。是否有可能使用sane默认值?请检查以下内容,您可以更改您的if语句
if(typeof getIntervalFromLocalStorage()==“number”)
只会触发数字,并且会否定对
getInterval
的需要,尽管如此,您的示例是有缺陷的,因为当interval为0时,
if(interval)
中的条件计算为falseanyway@Olena,我更喜欢在标准编程中使用相同类型的数据。因此,调用函数的人永远不希望看到多种类型的数据。是的,您可以将示例代码中的-ve数字传递为负返回。
function getInterval() {
    return  getIntervalFromLocalStorage();
}