我正在研究不同语言的错误处理方法。Array.findIndex
和 Array.find
的行为是完全不同的,当 item 是不存在时。find
方法更一致地返回一个 null/undefined
值或抛出异常。但在某些语言中 findIndex
返回 -1
来表示缺失值。我的问题是,返回到 -1
?
如果这个错误没有被处理成像 collection[items.findIndex("non-exist")]
很容易造成运行时的错误,那么我在这里缺少什么呢?
编辑更具体的说,如果一个语言支持异常,为什么在某些语言中还会回到 -1
而不是 throw?
在大多数语言中。-1
是一个不能代表数组索引的数字。因此,如果 .findIndex()
方法返回 -1
意味着没有这样的元素 肯定 你可以执行一个简单的检查,如
if (array.findIndex(...) == -1)
// an element does not exist in the array
来确定数组中是否存在一个元素。
按照你的逻辑,并将其应用到你的例子中,如果你的 .findIndex()
将返回 null
undefined
或抛出异常,那么你的示例用法
collection[items.findIndex("non-exist")]
将会以同样的方式失败,如果 .findIndex()
将返回 -1
因为既不 null
也不 undefined
可以是一个数组索引,所以这一行会抛出一个异常,我们需要处理。如果 .findIndex()
会在元素不存在时抛出异常,那么... 我们也必须处理异常。所以你可以看到,无论如何你都必须处理异常。
另一个原因是返回 -1
而不是null或抛出异常,就是在Java这样的语言中,不可能返回 null
的方法,而该方法应该返回一个数字。然而。.find()
是为了从数组中返回一个元素,这个元素可以是任何东西,因此返回的是 null
如果不希望数组中包含null-values,那么这个方法就很有意义。在这种情况下,你可以假设一个元素不存在,如果返回值是 null
.
在一些强类型语言(Java、C等)中,这是有意义的,因为一个 findIndex
函数可能只能返回整数。
在这些情况下,最好是返回-1而不是抛出错误,因为找不到东西本身并不是一个错误。在你的特定情况下可能是这样的,但很多时候它只是正常的和预期的。想象一下,你正在做一个电子邮件登录表单,并解析一个期望输入电子邮件的输入字段,你想检查用户是否使用了完整的电子邮件名称 ([email protected])或不(锄头). 如果用户没有键入 @email.com 因为你可以直接给他填。
编辑。 另外, 即使是在一些弱类型语言中 也可能希望总是返回一个整数的一致性. 也许你想对结果进行算术运算,而在这种语言中。if(i >= 3)
会抛出一个错误,如果 i
未定义或为空