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

这篇博客介绍了如何在不支持ECMAScript5的环境中实现Object.keys()方法,以获取对象的自身可枚举属性。文章通过分析思路,包括环境判断、参数检查、遍历属性、处理IE9以前的兼容性问题以及代码优化,提供了完整的解决方案,并以闭包优化了代码。适合对JavaScript有基础了解并想深入理解Object.keys()实现原理的读者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值