for…in用于遍历对象可枚举属性,包括继承属性,需用hasOwnProperty过滤自身属性;遍历数组时不保证顺序且会遍历非数字键,建议使用for…of或forEach;key始终为字符串类型,Symbol属性不会被遍历。

在JavaScript中,for…in语句用于遍历对象的可枚举属性,包括自身和继承的属性。虽然语法简单,但在实际使用中容易踩坑,尤其在处理数组或不同类型对象时需格外注意。
只遍历对象的可枚举属性
for…in会遍历对象所有可枚举的属性,包括从原型链上继承的属性。这意味着如果父级原型添加了可枚举方法或属性,它们也会被遍历到。
建议:使用 hasOwnProperty() 方法过滤出对象自身的属性,避免意外访问继承属性。
示例:
const obj = { a: 1, b: 2 };Object.prototype.extra = function() {};for (let key in obj) { if (obj.hasOwnProperty(key)) { console.log(key); // 只输出 a 和 b }}
不要用 for…in 遍历数组索引
尽管数组也是对象,for…in可以遍历数组的索引,但存在几个问题:
遍历顺序不保证,可能不是按数字顺序 会遍历所有可枚举属性,包括手动添加的非数字键 性能不如 for 或 for…of建议:遍历数组应优先使用 for…of、forEach 或传统 for 循环。
错误示例:
const arr = [10, 20, 30];arr.customProp = 'bad idea';for (let index in arr) { console.log(arr[index]); // 会输出 10, 20, 30, 'bad idea'}
属性类型始终是字符串
for…in中的键(key)总是字符串类型,即使遍历的是数组,index 也是字符串而非数字。
注意:在进行数学运算时要显式转换为数字,避免隐式类型转换错误。
例如:
for (let key in obj) { typeof key; // "string"}
Symbol 属性不会被遍历
for…in只能遍历字符串键的可枚举属性,Symbol 类型的键会被跳过。
如果需要获取所有键(包括 Symbol),应结合 Object.getOwnPropertySymbols() 使用。基本上就这些。合理使用 for…in,重点注意属性来源、类型和用途场景,避免误用。
以上就是js中for…in语句的使用注意的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1538888.html
微信扫一扫
支付宝扫一扫