jsはfor...in...オブジェクトを遍歴するときに注意しなければならない問題:遍歴はわけのわからない属性が多い


前言
最近、プロジェクトをしているときに小さな問題に遭遇しました.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
        }

これは注意すべき小さな問題で、少し油断すると多くの時間を浪費して、ここで皆さんに共有します.