JavaScript技巧之实现原生Object.keys()

Object.keys()方法用来获取一个对象的所有自身可枚举属性,然而,这个语法是在支持ECMAScript5的环境中才可以使用,对于一些老旧的浏览器,没有支持这个语法,我们又该如何正确获取一个对象的自身可遍历属性呢?

源代码

对于那些只是为了获取这个功能的朋友,我们不浪费时间,直接贴出来代码实现,我们之后会对这个代码实现思路进行一步步分析,有兴趣同学可以继续看下去:

    Object.keys = Object.keys ||  (function () {
   
        var hasOwnProperty = Object.prototype.hasOwnProperty,
            hasDontEnumBug = !({
   toString: null}).propertyIsEnumerable('toString'),
            dontEnums = [
              'toString',
              'toLocaleString',
              'valueOf',
              'hasOwnProperty',
              'isPrototypeOf',
              'propertyIsEnumerable',
              'constructor'
            ],
            dontEnumsLength = dontEnums.length;
            
        return function (obj) {
   
          if (typeof obj !== 'object' && typeof obj !== 'function' || obj === null) throw new TypeError('Object.keys called on non-object');
    
          var result = [];
    
          for (var prop in obj) {
   
            if (hasOwnProperty.call(obj, prop)) result.push(prop);
          }
    
          if (hasDontEnumBug) {
   
            for (var i=
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值