JS编程建议——26:小心if嵌套的思维陷阱

简介: 26:小心if嵌套的思维陷阱

建议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. }
    排除法有效地避免了条件结构的多重嵌套,并且更加符合人的思维模式。当然,这种设计方法也存在一定的局限性,一旦发生错误,就要放弃后面的操作。如果仅为了检查某个值的合法性,也就无所谓了。如果为了改变变量值和数据操作等,那么直接放弃就会导致后面的数据操作无法进行,为了防止此类问题的发生,不妨再设计一个标志变量来跟踪整个操作行为。
相关文章
|
6天前
|
设计模式 数据安全/隐私保护
Next.js 实战 (七):浅谈 Layout 布局的嵌套设计模式
这篇文章介绍了在Next.js框架下,如何处理中后台管理系统中特殊页面(如登录页)不包裹根布局(RootLayout)的问题。作者指出Next.js的设计理念是通过布局的嵌套来创建复杂的页面结构,这虽然保持了代码的整洁和可维护性,但对于特殊页面来说,却造成了不必要的布局包裹。文章提出了一个解决方案,即通过判断页面的skipGlobalLayout属性来决定是否包含RootLayout,从而实现特殊页面不包裹根布局的目标。
50 33
|
4月前
|
存储 JavaScript 前端开发
JavaScript编程实现tab选项卡切换的效果+1
JavaScript编程实现tab选项卡切换的效果+1
|
5月前
|
JavaScript 前端开发 编译器
解锁JavaScript模块化编程新纪元:从CommonJS的基石到ES Modules的飞跃,探索代码组织的艺术与科学
【8月更文挑战第27天】随着Web应用复杂度的提升,JavaScript模块化编程变得至关重要,它能有效降低代码耦合度并提高项目可维护性及扩展性。从CommonJS到ES Modules,模块化标准经历了显著的发展。CommonJS最初专为服务器端设计,通过`require()`同步加载模块。而ES Modules作为官方标准,支持异步加载,更适合浏览器环境,并且能够进行静态分析以优化性能。这两种标准各有特色,但ES Modules凭借其更广泛的跨平台兼容性和现代语法逐渐成为主流。这一演进不仅标志着JavaScript模块化的成熟,也反映了整个JavaScript生态系统的不断完善。
62 3
|
2月前
|
前端开发 JavaScript 持续交付
提高JavaScript编程效率
提高JavaScript编程效率
36 3
|
2月前
|
自然语言处理 JavaScript 前端开发
JavaScript闭包:解锁编程潜能,释放你的创造力
【10月更文挑战第25天】本文深入探讨了JavaScript中的闭包,包括其基本概念、创建方法和实践应用。闭包允许函数访问其定义时的作用域链,常用于数据封装、函数柯里化和模块化编程。文章还提供了闭包的最佳实践,帮助读者更好地理解和使用这一强大特性。
27 2
|
3月前
|
Web App开发 JavaScript 前端开发
Javascript嵌套函数的调用
Javascript嵌套函数的调用
|
4月前
|
JavaScript 前端开发
JavaScript编程实现tab选项卡切换的效果
JavaScript编程实现tab选项卡切换的效果
|
4月前
|
JavaScript 前端开发
用JavaScript编程控制网页上checkbox选择状态:全选、全部取消、反选
用JavaScript编程控制网页上checkbox选择状态:全选、全部取消、反选
|
4月前
|
JavaScript 前端开发 安全
JavaScript编程实现字符和字符串翻转
JavaScript编程实现字符和字符串翻转
|
4月前
|
JavaScript 前端开发
用JavaScript编程定义二维数组并初始化,然后输出元素值
用JavaScript编程定义二维数组并初始化,然后输出元素值