js 使用for...in...遍历对象时需要注意的一个问题:遍历时莫名其妙的多了属性
来源:互联网 发布:js object to list 编辑:程序博客网 时间:2024/05/21 19:41
前言
最近在做项目时遇到一个小问题:即在使用for…in…遍历对象的时候,突然发现对象莫名其妙的多了个属性,这个属性在声明的时候是没有的,后期也没有为它添加属性,但是究竟从何而来呢?经过一番调试之后找到原因,且看如下代码:
Object.prototype.say = function(){ alert('hello world!'); } var obj = { name:'小明', sex:'男', year:'18' } for(var attr in obj){ console.log(attr);//name sex year say }
显而易见,for…in…遍历对象会遍历出对象的所有可枚举的属性,这非常值得注意,因为在多人协作开发项目的时候,很有可能你的同事会在代码里Object.prototype.say来这么一段或是引入的插件里有那么一句,然而你并不知道,就会发生一些意想不到的事情,让你感到很诧异,调试了半天,原来是因为for…in…遍历莫名其妙的多了个属性。
然而如何去解决这个问题呢?可以利用es5的Object.defineProperty方法为属性添加限制,例子如下:
Object.defineProperty(Object.prototype,'say',{ value:function(){ alert('hello world!'); }, enumerable: false //让say属性不可枚举,需设置enumerable属性值为false }); var obj = { name:'小明', sex:'男', year:'18' } for(var attr in obj){ console.log(attr);//name sex year }
这是个值得注意的小问题,稍有不慎就会因此浪费很多时间,在此分享给大家。
阅读全文
0 0
- js 使用for...in...遍历对象时需要注意的一个问题:遍历时莫名其妙的多了属性
- 关于循环遍历时的for in和es6中for of 方法的对比
- for/in 循环遍历对象的属性
- for/in 循环遍历对象的属性
- for/in 循环遍历对象的属性
- C++中遍历容器对象时需要注意的问题
- 莫名其妙的解决了一个莫名其妙的问题
- 使用Struts标签取对象的属性值时需要注意的问题
- js中for in遍历对象属性
- JS需要注意的一个问题
- js遍历一个对象的所有属性
- 调试使用了函数模块的程序时需要注意的一个小问题
- 用for-in循环遍历非数组对象时一些值得注意的现象(hasOwnProperty的使用)
- javascript创建对象以及使用for(.. in ..)遍历对象的属性!
- 使用synchronized需要注意的一个问题
- 管理器的陷阱|列表遍历时修改了列表
- 一个莫名其妙的问题
- Select语句中使用FOR ALL ENTRIES IN需要注意的问题
- 深入理解JAVA I/O系列四:RandomAccessFile
- 安卓真机测试失败-''No target device found"
- 524. Longest Word in Dictionary through Deleting
- 《挑战程序设计竞赛》阅读笔记二 之 ALDS1_2_D Shell Sort
- 欢迎使用CSDN-markdown编辑器
- js 使用for...in...遍历对象时需要注意的一个问题:遍历时莫名其妙的多了属性
- elasticsearch 学习博客系列<二> ES 中 index 设置 Mapping(表结构)
- Lowest Bit
- android系统自带图片裁剪的注意事项(E/JavaBinder: !!! FAILED BINDER TRANSACTION !!!)
- Discovery:在vs2013平台上应用VideoInput第三方库
- 虚拟机相关问题日志
- 【算法题】双向冒泡排序
- TouchSlop
- Android控件——多状态按钮ToggleButton