for in文だとプロトタイプチェーン上のプロパティまで列挙されてしまう
そのため、自身のプロパティだけを判別して列挙するためにはtypeofまたはhasOwnPropertyを使います
for_in.js
//typeofを用いた場合
for (name in obj) {
if (typeof(obj[name]) !== 'function') {
console.log(name+'は自身のプロパティです');
}
}
//hasOwnPropertyを用いた場合
for (name in obj) {
if(obj.hasOwnProperty(name)) {
console.log(name+'は自身のプロパティです');
}
}
しかし、for文だと
配列の場合
for.js
for (i=0; i<arr.length; i++) {
var name=i;
console.log(name+'は自身のプロパティです');
}
とシンプルにかける。
オブジェクトの場合、underscorejsを用いると簡単にできます
for_obj.js
var obj = {
id : 1,
name : 'Tanaka',
age : 23,
living : true,
birthday : '1998/12/24'
};
_.reduce(obj, function(result, value, key){
console.log(key+'は、自身のプロパティです');
console.log('値は、'+value+'です');
return 0;
},0);
以上、お役に立てれば幸いです。