jsはfor...in...オブジェクトを遍歴するときに注意しなければならない問題:遍歴はわけのわからない属性が多い
前言
最近、プロジェクトをしているときに小さな問題に遭遇しました.for...in...を使ってオブジェクトを遍歴していると、突然オブジェクトがわけのわからない複数の属性を発見しました.この属性は宣言時にはなく、後期にも属性を追加していませんが、いったいどこから来たのでしょうか.デバッグ後に理由を見つけ、次のコードを参照してください.
明らかに、for...in...オブジェクトを遍歴すると、オブジェクトのすべての列挙可能な属性が遍歴されます.これは、複数の人が協力してプロジェクトを開発するときに、あなたの同僚がコードの中でObjectする可能性が高いので注意に値します.prototype.sayがこのように1段あるいは導入したプラグインの中にそんな1句があって、しかしあなたは知らないで、いくつか意外な事が発生して、あなたを驚かせて、半日デバッグして、もとはfor...in...がわけのわからない多くの属性を遍歴したためです.
しかし、どのようにしてこの問題を解決しますか?es 5のObjectを利用することができる.definePropertyメソッドは、次のようにプロパティに制限を追加します.
これは注意すべき小さな問題で、少し油断すると多くの時間を浪費して、ここで皆さんに共有します.
最近、プロジェクトをしているときに小さな問題に遭遇しました.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がこのように1段あるいは導入したプラグインの中にそんな1句があって、しかしあなたは知らないで、いくつか意外な事が発生して、あなたを驚かせて、半日デバッグして、もとはfor...in...がわけのわからない多くの属性を遍歴したためです.
しかし、どのようにしてこの問題を解決しますか?es 5の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
}
これは注意すべき小さな問題で、少し油断すると多くの時間を浪費して、ここで皆さんに共有します.