Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对于找不到所需内容的函数';她在找什么?_Javascript - Fatal编程技术网

Javascript 对于找不到所需内容的函数';她在找什么?

Javascript 对于找不到所需内容的函数';她在找什么?,javascript,Javascript,如果我的函数打算分别查找某个DOM节点,或对象数组中的某个对象,或整数列表中的一个数字,包括零和正负值,或字符串数组中的一个字符串——在每种情况下,如果该函数找不到匹配项,我应该返回什么未定义错误?是否有一种既定的方法来实现这一点?这取决于您可能希望返回-1或空数组的情况。但通常只返回null return null; 对于任何不是数组的东西,我都会选择false或null或未定义的 但是对于数组,我将返回空数组[],以便能够使用其他数组原型方法(过滤器、映射等)组合函数。您应该使用本机jav

如果我的函数打算分别查找某个DOM节点,或对象数组中的某个对象,或整数列表中的一个数字,包括零和正负值,或字符串数组中的一个字符串——在每种情况下,如果该函数找不到匹配项,我应该返回什么<代码>未定义<代码>错误?是否有一种既定的方法来实现这一点?

这取决于您可能希望返回-1或空数组的情况。但通常只返回null

return null;

对于任何不是数组的东西,我都会选择
false
null
未定义的


但是对于数组,我将返回空数组
[]
,以便能够使用其他数组原型方法(过滤器、映射等)组合函数。

您应该使用本机javascript方法作为示例。例如:

您的方法通常返回字符串吗?在这种情况下,像js方法一样返回

let s=“123”
设sub=s.substring(10)

log(typeof sub,sub)
出于几个原因,我将在
返回null
答案中添加另一个投票。这有几个优点

其中之一是JavaScript引擎可以通过假设始终返回相同形状的对象来优化代码。返回
null
将保留此形状

假设您总是返回由给定参数找到的项目。所以它是一个类型
{x:number}
。JIT编译器可以假设这一点,并将代码的一个版本直接放在机器代码中(或接近机器代码),说“它总是一个
{x:number}
”。但是,如果您现在有时抛出一个
返回false
,那么优化是无效的,因为它的内容是“此函数主要返回一个
{x:number}
,但有时返回布尔值时除外”。与未定义的
类似

但是null也可以是
{x:number}
的一个实例,它只是它的一个null实例

第二个原因是,现在人们越来越多地使用类型化系统——想想类型脚本和流。在这种类型的系统中,你的linter可能也会指出:“嘿,你总是返回一个
{x:number}
,但这里是一个布尔值,不要这样!”然后你的IDE红色在
返回false
部分下划线,你必须将返回类型注释更改为
,你的一天都完了

但如果它是空的,它就不会抱怨了。因此,我建议您为未找到的值返回null


注:当然,除了数组返回方法外,如上面的示例所示,如果您希望使用链接,则使用空数组。

@zer00ne您可以返回任何内容,函数将结束,为什么选择
false
?@zer00ne函数实际上返回一个
未定义的
,或者更具体地说,
void 0
,默认情况下。对于期望值的方法,通常的方法是返回null。我同意。您也可以在JS本身中看到,例如
文档。getElementById(“不存在的id”)
将返回
null
。您的第二段强调了我讨厌该方法的原因之一。@PatrickRoberts嗯,我明白了,如果没有匹配项,它将返回
null
!伟大的答案涵盖性能!