奇技淫巧之Object.keys

來源:互聯網
上載者:User

今天在群裡看到兩個keys函數實現

abcd的實現:

             var obj = {                 a:1,                 b:2,                 c:3             }             function keys(obj){                 var a = [], i = 0;                 for(a[i++] in obj);                 return a ;             }             console.log(keys(obj))

灰大的實現:

             var obj = {                 a:1,                 b:2,                 c:3             }             function keys(obj){                 var a = [];                 for(a[a.length] in obj);                 return a ;             }             console.log(keys(obj))

好瘋狂吧,用到for ( LeftHandSideExpression in Expression ) Statement 。我也不清楚,自己查ECMA。但我知道這實現是有問題的,Object.keys 只收集自身屬性名稱,不收集繼承自原型鏈上的。加之,IE6下對Object的一系列屬性是不可遍曆的,這時我們還要修正一下。下面才是正確的實現:

// by 司徒正美 https://github.com/RubyLouvre/mass-Framework/blob/master/browers/lang.js    var DONT_ENUM =  "propertyIsEnumerable,isPrototypeOf,hasOwnProperty,toLocaleString,toString,valueOf,constructor".split(","),    hasOwn = ({}).hasOwnProperty;    for (var i in {        toString: 1    }){        DONT_ENUM = false;    }    Object.keys = Object.keys || function(obj){//ecma262v5 15.2.3.14            var result = [];            for(var key in obj ) if(hasOwn.call(obj,key)){                result.push(key)            }            if(DONT_ENUM && obj){                for(var i = 0 ;key = DONT_ENUM[i++]; ){                    if(hasOwn.call(obj,key)){                        result.push(key);                    }                }            }            return result;        };

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.