对null进行多少次检查是否合适?

时间:2013-01-17 17:16:48

标签: javascript coding-style

当一个变量缺少一个字段并且用户看到这个或那个变量没有这个或那个属性的警告时,我就遇到了这个问题。在简单的情况下,它非常简单。

if(field)
  doSomething(field.subField);

然而,在经验情况下,我发现自己陷入了这种荒谬的过度检查。

if(!data 
  || !data.records 
  || !data.records[0] 
  || !data.records[0].field 
  || !data.records[0].field.id)
    return null;
doSomething(data);

我的意思是,来吧 - 如果我是水管工,而不是开发人员,看起来像是管道。所以,我有一种非常强烈的感觉,即我的支票虽然足够,但可能有点太过分了。 JS中有关于何时执行检查的约定?

2 个答案:

答案 0 :(得分:6)

我将提出一个有争议的意见。

在JavaScript中,不要在实际不应发生的地方检查null值。换句话说,您检查每个嵌套属性是否有空的想法有点过分,只会使您的脚本复杂化。

根据我的经验,我已经学会了让脚本错误发生。对于编写C代码或数据库代码的人来说,这有点违反直觉,其中未处理的null可能会使服务器崩溃或损坏数据,但是在脚本世界中,最好早点发现错误。如果您的页面继续加载而没有发生意外事件的迹象,那么当用户点击按钮或提交表单时,它将以稍后的怪异形式表现出来。

我的建议

如果您愿意为此做些什么,请仅检查null 。如果您的Web服务在出现问题时可能会返回null,那么请检查并显示错误消息。如果您返回非空值,则假定它是有效值并继续。没有理由使用空检查来丢弃整个脚本,这实际上不会给您的程序带来任何实际好处。

答案 1 :(得分:2)

通常情况下,如果对象存在,您将确保它始终具有一组基本属性,使其可用。

例如,如果变量data具有值,则它将是具有records属性的对象,该属性始终是数组,即使它是空的。如果数组包含任何内容,则它应始终是具有field属性的对象,该属性始终具有id个属性。这会将支票减少到:

if (!data || data.records.length == 0) {
  return null;
}