Object keys 与 for in 对比

for in一般用于遍历对象的属性;

作用于数组的for in除了会遍历数组元素外,还会遍历自定义可枚举的属性,以及原型链上可枚举的属性;

作用于数组的for in的遍历结果是数组的索引,且都为字符串型,不能用于运算;

某些情况下,可能按照随机顺序遍历数组元素;

Array.prototype.sayLength = function(){

  console.log(this.length);

  }

let arr = ['a','b','c','d'];

arr.name = '数组';

Object.defineProperties(arr,{

      type:{

                value:true,

                writable:true,

                enumerable:true

          }

    });

for(let i in arr){

    console.log(i);//0,1,2,3,name,type,sayLength

  }

Object.keys()

遍历结果为由对象自身可枚举属性组成的数组,数组中的属性名排列顺序与使用for in循环遍历该对象时返回的顺序一致;

与for in区别在于不能遍历出原型链上的属性;

Array.prototype.sayLength = function(){

            console.log(this.length);

        }

        let arr = ['a','b','c','d'];

        arr.name = '数组';

        Object.defineProperties(arr,{

            type:{

                value:true,

                writable:true,

                enumerable:true

            }

        });

var keys = Object.keys(arr);

console.log(keys);//["0", "1", "2", "3", "name", "type"]

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,256评论 0 13
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,268评论 19 139
  • HTML 5 HTML5概述 因特网上的信息是以网页的形式展示给用户的,因此网页是网络信息传递的载体。网页文件是用...
    阿啊阿吖丁阅读 4,172评论 0 0
  • 今天我们交给你们一个孩子! 2017-12-03 09:365 每天早上起来,都能看到邻家的女孩背着书包去上学。...
    YangJian杨建阅读 1,029评论 0 0
  • 考虑到《可能是目前最详细简明的CentOS7安装与管理教程》一文太长,以及简书目前不支持导航目录,阅读起来过于不便...
    姬艾思阅读 4,424评论 0 3