5个令人费解的JavaScript缺陷

发表于:2018-3-22 13:16

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Elena Vilchik/初心    来源:测试窝

  让我们一起来玩一个游戏:你需要阅读一些JavaScript代码片段,然后找出里面隐含的Bug。这些代码中有可能包含各种各样的错误,如运行时出错、包含有死代码以及一些非预期的错误行为。顺便提一下,这些代码片段并不是我凭空臆造的,他们均来自于开源项目,只是我将代码进行了简化。
  答案就在每一个代码片段的后面,但请不要作弊,自己先试着找一下Bug吧!
  代码段1
  答案:让我们看一下这个函数的最后一行:我们使用了formField的0号元素,该变量被初始化为relatedFieldId或null,当formField为null时,当函数运行到最后一行时程序将崩溃。
  代码段2:
  答案:代码“rank=3”将永远不会被执行到,因为“if(today > end)”将永远返回true。
  代码段3:
  答案:在这段程序中Math.ceil被调用了两次,但是有一次的返回值没有被使用。
  代码段4:
  答案:当我们第二次判断config的类型(typeof config === ‘function’)时,这个判断将永远会返回false,因为我们在第一次判断config的类型为function时将config设置为null,所以在这个函数中就存在了死代码。
  代码段5:
  答案:aLastAccessTime && !bLastAccessTime和!aLastAccessTime && bLastAccessTime将永远不会为true,所以与它们相邻的代码将永远不会被执行。只有当aLastAccessTime !== bLastAccessTime返回false时,后面两个判断才会被执行,此时aLastAccessTime 和bLastAccessTime 就必须严格地相等。
  所以你自己找到了多少Bug以及你花费了多长时间找到它们呢?所有这一切都是为了展示手动寻找代码中的错误是多么的困难,我们不应该低估自动化工具的强大功能,我们应该使用自动化来提高代码的质量和强健性,例如linter、测试框架和持续检查工具。
  所有的这些bug都能够用SonarJS检查出来,SonarJS是一个针对JavaScript的静态代码检查工具。使用SonarJS,你可以在不运行代码的情况下进行程序的数据流分析 ,从而发现程序运行时可能出现的异常。SonarJS可以作为IDE中的插件进行运行(SonarLint插件),也可以通过SonarCloud在线运行。

上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号