博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JS编程建议——26:小心if嵌套的思维陷阱
阅读量:6845 次
发布时间:2019-06-26

本文共 1024 字,大约阅读时间需要 3 分钟。

建议26:小心if嵌套的思维陷阱

人的思维是非常复杂的,这在一定程度上会增加if结构嵌套的复杂性。假设有4个条件,只有当这些条件全部成立时,才允许执行某件事情。遵循人的一般思维习惯,在检测这些条件时,常常会沿用下面这种结构嵌套:

  1. if(a){
  2. if(b){
  3. if(c){
  4. if(d){
  5. alert("所有条件都成立!");
  6. }
  7. else{
  8. alert("条件d不成立!");
  9. }
  10. }
  11. else{
  12. alert("条件c不成立!");
  13. }
  14. }
  15. else{
  16. alert("条件b不成立!");
  17. }
  18. }
  19. else{
  20. alert("条件a不成立!");
  21. }
    从思维的方向性上来考虑,这种结构嵌套并没有错误,使用下面这个if结构来表示更为简单。
  22. if(a && b && c && d){
  23. alert("所有条件都成立!");
  24. }
    从设计时的本意来考虑:使用if语句逐个验证每个条件的合法性,并且对某个条件是否成立进行提示,以方便跟踪每个条件。但是,如果使用了上面的if结构多重嵌套,就会出现另一种可能: a条件不成立,程序会自动退出整个嵌套结构,而不管b、c和d的条件是否成立。这种“武断”很容易给测试带来“伤害”。如果核心的处理过程包含多条语句,或者出错的情况处理更为复杂,层层包裹的if结构会使代码嵌套过深,难以编辑。 为避免上述情况的发生,一般采取排除法,即对每个条件进行排除,条件全部成立再执行特定的操作。为了能够把条件有机地联系在一起,这里使用了一个布尔型变量作为钩子把每个if条件结构串在一起。
  25. var t = true; // 初始化行为变量为true
  26. if(!a){
  27. alert("条件a不成立!");
  28. t = false;
  29. }
  30. if(!b){
  31. alert("条件b不成立!");
  32. t = false;
  33. }
  34. if(!c){
  35. alert("条件c不成立!");
  36. t = false;
  37. }
  38. if(!d){
  39. alert("条件d不成立!");
  40. t = false;
  41. }
  42. if(t){
  43. alert("所有条件都成立!");
  44. }
    排除法有效地避免了条件结构的多重嵌套,并且更加符合人的思维模式。当然,这种设计方法也存在一定的局限性,一旦发生错误,就要放弃后面的操作。如果仅为了检查某个值的合法性,也就无所谓了。如果为了改变变量值和数据操作等,那么直接放弃就会导致后面的数据操作无法进行,为了防止此类问题的发生,不妨再设计一个标志变量来跟踪整个操作行为。

转载地址:http://guvul.baihongyu.com/

你可能感兴趣的文章
ora-12170:tns连接超时
查看>>
【转载】世界各地对BI的应用状况
查看>>
js获取url参数值
查看>>
动态他Transact-SQL语句处理中的常见问题演示.sql
查看>>
浅谈管理软件开发类项目是怎么来的,怎么接到项目的,欢迎大家补充(转载和标注)...
查看>>
快速了解必要的网络知识
查看>>
HTML5标签嵌套规则
查看>>
Linux下面如何安装Django
查看>>
MySQL 中now()时间戳用法
查看>>
【数据结构与算法】二分查找
查看>>
练习ng-show和ng-hide的方法
查看>>
2016 第七届蓝桥杯 c/c++ B组省赛真题及解题报告
查看>>
Scrapy爬虫框架教程(四)-- 抓取AJAX异步加载网页
查看>>
HBase - 数据写入流程解析
查看>>
Redis(十三):Redis分布式锁的正确实现方式
查看>>
Markdown 语法整理大集合2017
查看>>
为 MariaDB 配置远程访问权限
查看>>
特征选择常用算法综述
查看>>
中小型网站的缓存策略
查看>>
巧用EasyRadius计费策略设置灵的计费费率,保证帐目一目了然
查看>>