javascript中 for in 、for 、forEach 、for of 、Object.keys().

一 、for ..in 循环

  使用for..in循环时,返回的是所有能够通过对象访问的、可枚举的属性,既包括存在于实例中的属性,也包括存在于原型中的实例。这里需要注意的是使用for-in返回的属性因各个浏览器厂商遵循的标准不一致导致对象属性遍历的顺序有可能不是当初构建时的顺序。(实例+原型中的可枚举属性

1、遍历数组

  虽然for..in主要用于遍历对象的属性,但同样也可以用来遍历数组元素。

2:for..in和for遍历数组时下标类型不一样
var colors = [‘red‘, ‘green‘, ‘blue‘];

for (var i in colors) {
  typeof i; // string
}

for (var j = 0; j < colors.length; j++) {
  typoef i; // number
}

二、JavaScript forEach() 方法

列出数组的每个元素:

<button onclick="numbers.forEach(myFunction)">点我</button>
<p id="demo"></p>

<script>
demoP = document.getElementById("demo");
var numbers = [4, 9, 16, 25];

function myFunction(item, index) {
    demoP.innerHTML = demoP.innerHTML + "index[" + index + "]: " + item + "<br>";
}index[0]: 4index[1]: 9index[2]: 16index[3]: 25
</script>

三、for...of  方法

1、for..of为ES6新增的方法,主要来遍历可迭代的对象(包括Array, Map, Set, arguments等),它主要用来获取对象的属性值,而for..in主要获取对象的属性名。

  • for of支持遍历数组、类对象(例如DOM NodeList对象)、字符串、Map对象、Set对象;
  • for of不支持遍历普通对象,可通过与Object.keys()搭配使用遍历;(见示例二)
  • for of遍历后的输出结果为数组元素的值;
var colors = [‘red‘, ‘green‘, ‘blue‘];
colors.length = 5;
colors.push(‘yellow‘);

for (var i in colors) {
  console.log(colors[i]); // red green blue yellow
}

for (var j of colors) {
  console.log(j); // red green blue undefined undefined yellow
}

可以看到使用for..of可以输出包括数组中不存在的值在内的所有值

2、其实除了使用for..of直接获取属性值外,我们也可以利用Array.prototype.forEach()来达到同样的目的。

var colors = [‘red‘, ‘green‘, ‘blue‘];
colors.foo = ‘hello‘;
console.log(Object.keys(colors));//["0", "1", "2", "foo"]
Object.keys(colors).forEach(function(elem, index) {
  console.log(elem);//0 1 2 foo
  console.log(colors[elem]); // red green blue hello
  console.log(colors[index]); // red green blue undefined
});

colors.forEach(function(elem, index) {
  console.log(elem); // red green blue
  console.log(index); // 0 1 2
})

四、Object.keys() 方法

  • 遍历结果为由对象自身可枚举属性组成的数组,数组中的属性名排列顺序与使用for in循环遍历该对象时返回的顺序一致;
  • 与for in区别在于不能遍历出原型链上的属性;
// 遍历数组
var colors = [‘red‘, ‘green‘, ‘blue‘];
colors.length = 10;
colors.push(‘yellow‘);
Array.prototype.demo = function () {};

Object.keys(colors); // ["0", "1", "2", "10"]

// 遍历对象
function Person(name, age) {
  this.name = name;
  this.age = age;
}

Person.prototype.demo = function() {};

var jenemy = new Person(‘jenemy‘, 25);

Object.keys(jenemy); // ["name", "age"]

五、总结

一、1、for in循环。遍历实例+原型中可枚举的属性
  2、for in不适合遍历数组
  7、for in遍历数组的下标类型不一样 :for in为String,for为Number
  8、对不存在项的处理:for in不存在的项不被枚举出来;for全部枚举出
  9、index in array特性可以判断某个索引是否存在对应元素
二、Object.keys(),遍历实例可枚举属性,返回属性名组成的数组。
三、for of输出数组中包括不存在的值在内的所有值

原文地址:https://www.cnblogs.com/houjl/p/10126785.html

时间: 2024-11-05 23:19:58

javascript中 for in 、for 、forEach 、for of 、Object.keys().的相关文章

Javascript中的&quot;函数是第一类对象(first-class object)&quot;

本身这句话很好解释,函数有两个主要特点,援引自 陈新 译的<JavaScript模式>: 1.函数是第一类对象: 函数可以在运行时动态创建,还可以在程序执行过程中创建. 函数可以分配变量,可以将它们的引用复制到其他变量,可以被扩展,此外,除少数特殊情况外,函数还可以被删除. 可以作为参数传递给其他函数,并且还可以有其他函数返回. 函数可以有自己的属性和方法. 2.函数提供了作用域 在JavaScript中,没有使用花括号{}语法来定义局部变量的作用域,也就是说,块并不能创建作用域.这也就意味着

JavaScript中的数组遍历forEach()与map()方法以及兼容写法

原理: 高级浏览器支持forEach方法 语法:forEach和map都支持2个参数:一个是回调函数(item,index,list)和上下文: forEach:用来遍历数组中的每一项:这个方法执行是没有返回值的,对原来数组也没有影响: 数组中有几项,那么传递进去的匿名回调函数就需要执行几次: 每一次执行匿名函数的时候,还给其传递了三个参数值:数组中的当前项item,当前项的索引index,原始数组input: 理论上这个方法是没有返回值的,仅仅是遍历数组中的每一项,不对原来数组进行修改:但是我

在 JavaScript 中为什么 typeof null 的结果是 object?

java 中的 null:既是对象,又不是对象,史称「薛定谔的对象」. typeof null==='object';  ..//true null instanceof Object  //false nullinstanceofObject===false 而 null instanceof null 会抛出异常: UncaughtTypeError:Right-hand side of 'instanceof'isnotan object 这是一个历史遗留下来的 feature(or bu

javascript中的Function和Object

写的很好,理解了很多,特此转发记录 转自:http://blog.csdn.net/tom_221x/archive/2010/02/22/5316675.aspx 在JavaScript中所有的对象都继承自Object原型,而Function又充当了对象的构造器,那么Funtion和Object到底有着什麽样的关系呢 ? 首先,一切都是对象. 1 alert(Object instanceof Object); // true 2 alert(Function instanceof Objec

Javascript中的delete

一.问题的提出 我们先来看看下面几段代码,要注意的是,以下代码不要在浏览器的开发者工具(如FireBug.Chrome Developer tool)中运行,原因后面会说明: 为什么我们可以删除对象的属性: 复制代码代码如下: var o = { x: 1 }; delete o.x; // true o.x; // undefined 但不以删除像这样声明的变量: 复制代码代码如下: var x = 1; delete x; // false x; // 1 也不能删除像这样定义的函数: 复制

JavaScript中如何中断forEach循环

先来看下forEach的实现 // Production steps of ECMA-262, Edition 5, 15.4.4.18// Reference: http://es5.github.io/#x15.4.4.18if (!Array.prototype.forEach) {   Array.prototype.forEach = function(callback, thisArg) {     var T, k;     if (this === null) {      th

JavaScript中的数组与伪数组的区别

在JavaScript中,除了5种原始数据类型之外,其他所有的都是对象,包括函数(Function). 5种原始数据类型: number boolean string null undefined 在这个前提下,咱们再来讨论JavaScript的对象. 1.创建对象 var obj = {}; //种方式创建对象,被称之为对象直接量(Object Literal) var obj = new Object(); // 创建一个空对象,和{}一样 更多创建对象的知识,参见<JavaScript权威

如何理解并学习javascript中的面向对象(OOP) [转]

如果你想让你的javascript代码变得更加优美,性能更加卓越.或者,你想像jQuery的作者一样,写出属于自己优秀的类库(哪怕是基于 jquery的插件).那么,你请务必要学习javascript面向对象,否则你无法更灵活的使用javascript这门语言. 什么事闭包?到底什么是原型?(知道闭包和原型的,就算得上是javascript的高手了.但真正能够理解,并且灵活运用的人并不多)到底该如何学习javascript中的面向对象呢?在javascript这么语言正如日中天,相信不少人正在为

【前端】javascript中10常用的个小技巧总结

javascript中10常用的个小技巧总结 本文转自:http://www.cnblogs.com/libin-1/p/6756393.html 1. new Set() 可能有人知道ES6中提供了新的数据结构 Set,但是能够灵活运用的人或许不多.利用Set数据结构我们能够轻松的去重一个数组,比如: let arr = [1, 2, 2, 3]; let set = new Set(arr); let newArr = Array.from(set); // Array.from方法可以将