首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么使用"!= null“来测试是否传递了参数并不好

为什么使用"!= null“来测试是否传递了参数并不好
EN

Stack Overflow用户
提问于 2013-07-16 22:13:33
回答 4查看 646关注 0票数 9

它在《可维护的JavaScript》一书中提到:

代码语言:javascript
运行
复制
// Bad: Testing to see if an argument was passed
function doSomething(arg1, arg2, arg3, arg4){
if (arg4 != null){
    doSomethingElse();
  }
}

但我觉得在这里使用!= null是非常有效的,它过滤了参数未传递或作为null传递的情况

作者认为它很糟糕的原因是什么?

EN

回答 4

Stack Overflow用户

发布于 2013-07-16 22:17:10

对于undefined!= null为false,它基本上表示x !== null && x !== undefined!=确实存在类型强制,其效果之一是它将nullundefined等同起来(null == undefined为真)。

因此,除非您希望这样,否则有些人建议不要将!=null (或undefined)一起使用。

您说得很对,代码防御了两种(实际上是三种)可能性:

传递了passed.

  • undefined时,all.

  • null处的参数
  1. 未传递任何内容。

但评论说,这是一种测试参数是否被传递的糟糕方法,事实的确如此:因为它没有捕捉到传递nullundefined。(传入null和不传入任何内容是不同的情况。)这并不一定意味着这是检查特定函数的参数的坏方法。

票数 9
EN

Stack Overflow用户

发布于 2013-07-16 22:19:17

好的。在javascript中,你可以有null值和undefined值。它们是不一样的。检查arg是否有效的一种快速简单的方法可能是:

if (arg4)

这样你就可以检查arg4 is not null,not undefined,And not false。请注意最后一个条件,您可能会在此处有意识地通知错误值:-)

编辑: T.J. Crowder就在这里。这很容易使用,并且在大多数情况下都可以工作,但要小心。

票数 0
EN

Stack Overflow用户

发布于 2013-07-16 22:38:38

我强烈推荐观看http://www.infoq.com/presentations/Null-References-The-Billion-Dollar-Mistake-Tony-Hoare --这是他本人在这件事上的精彩演讲。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17678934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档