`
wangxiaohigh
  • 浏览: 1459305 次
文章分类
社区版块
存档分类
最新评论

奇技淫巧之Object.keys

 
阅读更多

今天在群里看到两个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的一系列属性是不可遍历的,这时我们还要修正一下。下面才是正确的实现:

    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;
        };
0
0
分享到:
评论

相关推荐

    Python 语言有什么奇技淫巧吗?.docx

    Python 语言奇技淫巧总结 Python 语言作为一种高效、灵活的编程语言,具有许多奇技淫巧,可以帮助开发者提高编程效率和代码质量。在本文中,我们将探讨 Python 语言中的四大奇技淫巧:循环代码优化、异常处理,以及...

    算法心得-高效算法的奥秘(原书第2版)_带书签_高清_[位运算的奇技淫巧].pdf

    《算法心得-高效算法的奥秘(原书第2版)》是一本深入探讨算法精髓的书籍,...书中的"位运算的奇技淫巧"部分,无疑是将这种技术运用到极致的探索,对于有志于提升算法水平的开发者来说,是一份不可多得的参考资料。

    来自小密圈里的那些奇技淫巧.pdf

    标题中提到的“来自小密圈里的那些奇技淫巧”可能是指在特定的技术圈子中分享的一些特殊技巧,用于突破安全限制和进行有效的攻击测试。以下将详细解释文档中提及的各个技巧: 1. EVAL长度限制突破技巧: 在PHP中,`...

    vue有哪些奇技淫巧.md

    vue有哪些奇技淫巧

    CSS相关综合专栏。 计划包含四个方面: ①CSS基础②进阶专题③面试题汇总④一些有意思的奇技淫巧。.zip

    一些有意思的奇技淫巧可能涵盖: 1. 不常见的CSS属性或用法,提供独特的设计解决方案。 2. CSS hack,用于解决特定浏览器的兼容性问题。 3. 利用CSS实现有趣的视觉效果,如纯CSS图形、3D效果等。 4. 利用CSS进行页面...

    渗透中关于dns的奇技淫巧.pdf

    检测这种攻击的方法之一是观察DNS服务器的异常查询行为,如: - `dig . NS @你要日的dns` 防御DNS放大攻击的关键在于限制未经授权的区域传输和加强DNS服务器的安全配置。 4. **DNS注入、命令执行与隧道** 在某些...

    Git的奇技淫巧.zip

    Git是一个 “分布式版本管理工具”,简单的理解版本管理工具:大家在写东西的时候都用过 “回撤” 这个 功能,但是回撤只能回撤几步,假如想要找回我三天之前的修改,光用 “回撤” 是找不回来的。...

    JavaScript奇技淫巧44招【实用】

    - 使用`Object.keys`, `Object.values`和`Object.entries`处理对象。 - 使用`map`, `filter`, `reduce`等数组方法进行高效的数据处理。 - 掌握闭包和模块化,以更好地管理作用域和复用代码。 - 熟悉Promise和async/...

    RocketMQ 奇技淫巧之 ServiceLoader 源码解读 - GitChat

    RocketMQ 奇技淫巧之 ServiceLoader 源码解读 抓下来打包成了HTML文件, 方便离线观看

    JavaScript奇技淫巧45招 _ 不可能不确定1

    JavaScript是世界上最流行的编程语言之一,尤其在Web开发领域中占据着核心地位。它不仅可以用于创建交互式的网页,还可以用于移动应用开发、服务器端编程(如Node.js)等。这篇文章总结了45个实用的JavaScript技巧、...

    Python那些事——python的奇技淫巧

    Python,作为一门广受欢迎的编程语言,在...总之,Python的这些“奇技淫巧”展示了这门语言在实际编程中灵活多变的应用能力,对于学习和使用Python的开发者而言,了解这些技巧能够极大地提高开发效率和程序的用户体验。

    移动端Ui自动化上的正经奇技淫巧Havefun

    2. **Page Object模式**:这是一种设计模式,用于封装UI元素和与之相关的操作,提高了代码的可维护性和可读性。通过创建代表页面或屏幕的类,我们可以将交互逻辑和定位器集中管理。 3. **Mock服务**:在自动化测试...

    Go-Git的奇技淫巧

    在这个“Go-Git的奇技淫巧”中,我们将探讨一些高级和实用的Git技巧,以及如何使用Go来进一步操作Git。 1. **分支管理**:Git的分支机制允许开发者在同一项目上并行工作。`git branch`命令用于创建、查看和切换分支...

    leetcode下载-Algorithm:算法工具包合集

    包括一些常见的面试题,及一些奇技淫巧. csy.array:数组相关 csy.backtracking:回溯法 八皇后 全排列 组合 csy.bbst: 红黑树 csy.binarytree:二叉树,包括插入 删除 前中后序遍历 搜索,中序遍历下的前驱后继等 csy....

    jj-learning:工作学习中的积累,作为沉淀也是财富。有错误的地方或者建议可以web_jwq@163.com联系我~

    jj-learning 工作学习中的积累,作为沉淀也是财富。有错误的地方或者建议可以 联系我~ ...奇技淫巧 tslint.json 配置说明 encodeURIComponent 与 Java 的区别 数据结构和算法 目录 npm 实用语句 库 j

    CSS中边框使用负边距值的奇技淫巧

    标题“CSS中边框使用负边距值的奇技淫巧”暗示了负边距在CSS中的独特应用,这些应用可能并不常见,但能够解决特定的布局挑战。描述提到,通过负边距可以进行布局调整和实现元素重叠,这些都是设计师和开发者可以利用...

Global site tag (gtag.js) - Google Analytics