记录javascript语言object类型的一些问题。javascript
1. typeof []; // object 2. typeof {};// object 3. typeof null; //object
这里讲的是第二种状况。java
class Super{ constructor(val){ this.value=val; } }; const suber = { value:'suber' }; suber.prototype = new Super('super'); for(attr in suber){ const val = suber[attr] console.log('attr-val=>',attr,val); //attr-val=> value suber attr-val=> prototype Super {value: "super"} }
这个问题不少人都应该知道。解决的办法也不少:
1) 使用hasOwnProperty(attr) 来取自有属性的值
2) 使用Object.keys(object) 来取得全部的自有属性key,而后object[key]来取得value数组
Properties order in objects is not guaranteed in JavaScript; you need to use an Array.浏览器
for...in 遍历的顺序是按道理来说是按照出现的前后顺序,可是各家浏览器遍历顺序有所不一样。this
Chrome Opera 中使用 for-in 语句遍历对象属性时会遵循一个规律,它们会先提取全部 key 的 parseFloat 值为非负整数的属性, 而后根据数字顺序对属性排序首先遍历出来,而后按照对象定义的顺序遍历余下的全部属性。其它浏览器则彻底按照对象定义的顺序遍历属性。prototype
因此,顺序这种事,仍是要用数组来保证。code
详细请参考:JS对象遍历顺序对象
参考连接:JS对象遍历顺序排序