手机网站建设多少钿,开源商城,wordpress如何实现,泰州网站建设与网页制作#xff08;一#xff09;for...in引发的一个报错两年前写的一个文章目录生成插件vue-outline#xff0c;一直用着没出啥问题#xff08;本站的文章目录也是用该插件生成的#xff09;。但是最近一个网友在使用的时候却出现了异常报错#xff0c;异常代码使用了一个for..…一for...in引发的一个报错两年前写的一个文章目录生成插件vue-outline一直用着没出啥问题本站的文章目录也是用该插件生成的。但是最近一个网友在使用的时候却出现了异常报错异常代码使用了一个for...in遍历数组for 代码本意是通过用户给定的选择器列表selectors确定哪些元素可以提取出来作为标题比如传一个[h1, h3, div.title]。网友的使用方法完全正确selectors传递的都是合法的选择器但是会出现以下报错一个函数不是一个合法的选择器selectors里传递的都是选择器。最后这位网友找到了原因可能和for...in有关系因为他在数组的原型上添加了一些便捷的方法而for...in会遍历出原型上的这些方法这就导致在执行前面的代码时把一个函数作为参数传递给了querySelectorAll导致报错二for...in细节for...in本身是Object的遍历方法JS中的数组也继承自Object所以自然而然也能使用for...in遍历出属性。然而for...in有一些难以注意到的细节稍不注意就可能被坑。1. 细节一 遍历的的属性值是字符串而不是数字相信初接触JS的人都要被坑一次吧const 打印0 可以看到typeof i的返回值是“string”这个最坑的地方在于我们通过下标加减想取别的元素时就会出现异常像上述输出的i 1一样并不是数字相加而是字符串拼接2. 细节二遍历的是对象的枚举属性包括自身属性以及原型链上的属性const 输出a 可以看到原型上的属性c也打印出来了但是通过Object.defineProperty定义的不可枚举属性denumerable: false没有被遍历到。3. 细节三遍历顺序是对象属性的枚举顺序并不一定按数组的下标顺序遍历for...in的遍历顺序是枚举顺序对于数组而言规范并没有约束各浏览器的实现。因此即便在一定范围内是按顺序遍历的也应该尽量不依赖for...in遍历的顺序。MDN文档也明确指出不建议使用for...in遍历数组特别是想按照索引顺序遍历的时候 此外因为有稀疏数组的存在其实JS里的数组不一定是顺序结构存储的。当数组的键分布较为稀疏为了充分节约空间数组可能会退化为像对象一样的哈希表存储结构。 因为for...in本身是对象的遍历方法并不适用于数组对于数组还是for...of、for循环、forEach等遍历比较好。作者MuMa链接为什么不推荐用for...in遍历数组 - 沐码小站