一.for in
1.使用 for in 循環遍歷對象的屬性時,原型鏈上的所有屬性都將被訪問:
Object.prototype.say="cgl"; // 修改Object.prototype var person ={ age: 18 }; for (var key in person) { console.log(key, person[key]);//這里用person.key得不到對象key的值,用person[key] 或者 eval("person."+key); } //結果: age 18
say cgl
2.只遍歷對象自身的屬性,而不遍歷繼承於原型鏈上的屬性,使用hasOwnProperty 方法過濾一下。
Object.prototype.say="cgl"; var person ={ age: 18 }; for (var key in person) { if(person.hasOwnProperty(key)){ console.log(key, eval("person."+key)); } } //結果:age 18
二.Object.keys()
Object.keys() 方法會返回一個由給定對象的自身可枚舉屬性組成的數組,數組中屬性名的排列順序和使用 for...in
循環遍歷該對象時返回的順序一致 (兩者的主要區別是 一個 for-in 循環還會枚舉其原型鏈上的屬性)。返回值是這個對象的所有可枚舉屬性組成的字符串數組。
Object.prototype.say="cgl"; var person ={ age: 18}; console.log(Object.keys(person));//結果 ["age"]
小技巧:object對象沒有length屬性,可以通過Object.keys(person).length,來獲取person的長度了。