for in遇到的bug

项目场景:

由于ie不兼容getElmentsByClassName获取元素,所以我自己封装该方法: ie支持ID与TagName获取元素

问题描述:

提示:这里描述项目中遇到的问题:
for in 遍历数组时split()报错

 // 原因:className获取元素不兼容ie
        // 兼容所有浏览器的方法只有id 与tagName
        function getclassName(cls) {
            let arr = []//用于存储类名的数组

            let elments = document.getElementsByTagName("*");//获取所有节点
            console.log(elments)
            for (let i in elments) {
                let classarr = elments[i].className.split(" ")
                for (let j in classarr) {
                    if (classarr[j] == cls) {
                        arr.push(elments[i])
                        break
                    }
                }
            }
            return arr
        }

在这里插入图片描述


原因分析:

split为string型方法,split报错可能for in 遍历出了不是string型的元素,引起报错


解决方案:

1.首先判断遍历出的类型,证实分析的正确性
 for (let i in elments) {
                
                console.log(typeof elments[i].className)
                // let classarr = elments[i].className.split(" ")
                // for (let j in classarr) {
                //     if (classarr[j] == cls) {
                //         arr.push(elments[i])
                //         break
                //     }
                // }
            }

在这里插入图片描述

2.有3个undefined,那这3个是什么呢?
在这里插入图片描述

   for (let i in elments) {
                
                console.log(typeof elments[i].className,elments[i])

在这里插入图片描述
可以看到,最后3个对象中没有classNaem属性,所以undefined,而最后3个对象怎么出来的。

  for (let i =0;i<elments.length;i++) {
                
                console.log(typeof elments[i].className,elments[i])
                // let classarr = elments[i].className.split(" ")
                // for (let j in classarr) {
                //     if (classarr[j] == cls) {
                //         arr.push(elments[i])
                //         break
                //     }
                // }
            }
            return arr
        }

在这里插入图片描述

  for (let i of elments) {
                
                console.log(typeof i.className,i)
                // let classarr = elments[i].className.split(" ")
                // for (let j in classarr) {
                //     if (classarr[j] == cls) {
                //         arr.push(elments[i])
                //         break
                //     }
                // }
            }

在这里插入图片描述
这里我们可以看到,另外两种遍历方式没有出现for in 的情况

得出结果:

for in 遍历会将对象从构造函数继承过来的属性都会遍历出来,而for循环与for of 不会,以后要注意!!!!

### 如何解决软件测试中的常见BUG及应对策略 #### 定义清晰的测试策略 为了有效地处理和预防Bug,在一定软件测试标准、测试规范指导下制定合理的测试原则、方式和方法至关重要[^1]。这不仅有助于提高测试效率,还能确保尽可能多地发现并修复程序中存在的问题。 #### 增强沟通与协作机制 针对开发人员未经许可擅自部署代码的情况,建立有效的沟通渠道和技术评审制度显得尤为重要[^2]。通过加强团队间的交流互动以及实施严格的变更控制流程来减少此类事件的发生频率。 #### 编写详尽全面的测试计划 一份优秀的软件测试计划对于成功完成整个项目有着不可替代的作用。其核心价值在于有效管理测试活动的同时揭示更多隐藏于产品之内的错误或不足之处;为此,需保证所设计出来的方案具备广泛的功能覆盖面,并采用实际操作性强的技术手段来进行验证工作[^3]。 #### 合理运用不同类型的测试技术 根据实际情况灵活选用合适的检测模式——无论是基于外部行为表现(即黑盒法),还是深入探究内部逻辑结构(即白盒法)。前者侧重考察应用程序对外界请求响应是否符合预期目标;后者则更关注源码层面可能存在的隐患点位,从而实现精准定位故障原因的目的[^4]。 ```python def find_bug_in_code(code_snippet): try: # 对传入的代码片段执行静态分析或其他形式的初步筛查 analysis_result = perform_static_analysis(code_snippet) if not analysis_result['success']: raise Exception(f"Static Analysis Failed: {analysis_result['message']}") # 如果静态分析未发现问题,则继续运行动态测试案例集 test_results = run_dynamic_tests(compile_and_run(code_snippet)) for result in test_results: if not result.passed: return f"A bug was found during dynamic testing: {result.error_message}" return "No bugs detected." except Exception as e: return str(e) # 这里仅提供了一个简单的函数框架用于说明概念, # 实际应用中应结合具体场景定制化开发相应的工具链。 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值