for in,Object.keys()与for of的区别
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"]
for of
- ES6中添加的循环语法;
- for of支持遍历数组、类对象(例如DOM NodeList对象)、字符串、Map对象、Set对象;
- for of不支持遍历普通对象,可通过与Object.keys()搭配使用遍历;(见示例二)
- for of遍历后的输出结果为数组元素的值;
- 搭配实例方法entries(),同时输出数组内容和索引;(见示例三)
示例一:
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 of arr){
console.log(i);//a,b,c,d
}
示例二:
var person={
name:'coco',
age:22,
locate:{
country:'China',
city:'beijing',
}
}
for(var key of Object.keys(person)){
//使用Object.keys()方法获取对象key的数组
console.log(key+": "+person[key]);//name: coco,age: 22,locate: [object Object]
}
示例三:
let arr3 = ['a', 'b', 'c'];
for (let [index, val] of arr3.entries()) {
console.log(index + ':' + val);//0:a 1:b 2:c
}
PS:让jquery对象支持for of遍历
// 因为jQuery对象与数组相似
// 可以为其添加与数组一致的迭代器方法 jQuery.prototype[Symbol.iterator] = Array.prototype[Symbol.iterator];
注:本文部分内容来自以下链接内容
for in,Object.keys()与for of的区别的更多相关文章
- 关于Object.keys()和for in的区别
今天见到一道面试题让说一说Object.keys()和for in的区别,顿时有些发懵“What's Object.keys?”我立马上网搜了一下,大致作用也是做遍历,参数是一个对象,返回值是一个数组 ...
- [转]IE8兼容Object.keys
转自:http://blog.sina.com.cn/s/blog_6d63cf160102vbsg.html 只需要加入 var DONT_ENUM = "propertyIsEnumer ...
- JavaScript中in操作符(for..in)、Object.keys()和Object.getOwnPropertyNames()的区别
ECMAScript将对象的属性分为两种:数据属性和访问器属性.每一种属性内部都有一些特性,这里我们只关注对象属性的[[Enumerable]]特征,它表示是否通过 for-in 循环返回属性,也可以 ...
- Object.keys()
Object.keys(obj),返回一个数组,数组里是该obj可被枚举的所有属性名.请看示例: 示例一: function Pasta(grain, width, shape) { this.gra ...
- 获取对象属性(key)组成的数组 Object.keys( obj ).md
Object.keys() 方法会返回一个由给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和使用 for...in 循环遍历该对象时返回的顺序一致 (两者的主要区别是 一个 for-in ...
- Object.keys、Object.getOwnPropertyNames区别
用途 Object.keys 定义:返回一个对象可枚举属性的字符串数组: Object.getOwnPropertyNames 定义:返回一个对象可枚举.不可枚举属性的名称: 属性的可枚举性.不可枚举 ...
- 遍历对象属性(for in、Object.keys、Object.getOwnProperty)
js中几种遍历对象的方法,包括for in.Object.keys.Object.getOwnProperty,它们在使用场景方面各有不同. for in 主要用于遍历对象的可枚举属性,包括自有属性. ...
- [转] JavaScript中in操作符(for..in)、Object.keys()和Object.getOwnPropertyNames()的区别
ECMAScript将对象的属性分为两种:数据属性和访问器属性.每一种属性内部都有一些特性,这里我们只关注对象属性的[[Enumerable]]特征,它表示是否通过 for-in 循环返回属性,也可以 ...
- Array.from();Object.keys();Array.map()
Array.from():方法从一个类似数组或可迭代对象创建一个新的数组形式: const bar = ["a", "b", "c"]; A ...
随机推荐
- Linux的chattr与lsattr命令详解
Linux的chattr与lsattr命令详解 这两个命令是用来查看和改变文件.目录属性的,与chmod这个命令相比,chmod只是改变文件的读写.执行权限,更底层的属性控制是由chattr来改变的. ...
- python相关资料
http://blog.jobbole.com/59535/ http://www.nryoung.org/blog/2013/2/28/python-threading/ http://blog.j ...
- 浅谈Maven
最近的有用到Maven 所以就大概跟大家谈一下Maven 1什么是Maven? Maven我个人的理解就是项目架包管理 通俗易懂的来说就是管理配置你项目中的所有jar包的 废话不多说 Maven去ht ...
- 用StringBuilder和StringBuffer实现的Unicode解码方法的比较(Java)
初衷是用正则来写一个Unicode字符串转码的方法,一开始是打算结合StringBuilder写的,但是看到jdk7的Matcher.appendReplacement文档中一段示例代码用了Match ...
- TQ2440在Ubuntu16.04上如何搭建DNW烧写环境
八月份国赛比完,原计划开始的嵌入式Linux学习一直拖到了现在:由于之前所有的开发全在Windows下进行的,对各种底层完全不清楚,刚好这段时间开始学习Linux,我就在想能不能把开发环境给迁移到Li ...
- 基于FPGA的有限状态机浅析
前言:状态机大法好,状态机几乎可以实现一切时序逻辑电路. 有限状态机(Finite State Machine, FSM),根据状态机的输出是否与输入有关,可分为Moore型状态机和Mealy型状态机 ...
- 以太坊客户端Geth命令用法-参数详解
Geth在以太坊智能合约开发中最常用的工具(必备开发工具),一个多用途的命令行工具. 熟悉Geth可以让我们有更好的效率,大家可收藏起来作为Geth命令用法手册. 本文主要是对geth help的翻译 ...
- debug断点调试
debug断点调试 1,虫子启动2,F6 执行断点的下一步,下一个语句 F5 进入方法 F8 执行到结束 查看表达式的值:选中查看的表达式,接着按 ctrl ...
- Shell编程基础篇
1.1 前言 1.1.1 为什么学Shell Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, Linux/UNIX系统的底层及基础应用软件的核心大都涉及Shell脚 ...
- 备忘录模式(Memento)
备忘录模式(Memento) 主要目的是保存一个对象的某个状态,以便在适当的时候恢复对象,个人觉得叫备份模式更形象些,通俗的讲下:假设有原始类A,A中有各种属性,A可以决定需要备份的属性,备忘录类B是 ...