js-循环的方法
来源:互联网 发布:gta5低配优化 编辑:程序博客网 时间:2024/06/02 00:03
概念区别
1.for...in 语句
for...in 语句以任意顺序遍历一个对象的可枚举属性。循环将迭代对象的所有可枚举属性和从它的构造函数的 prototype 继承而来的(包括被覆盖的内建属性)。
数组索引仅是可枚举的整数名,其他方面和别的普通对象属性没有什么区别。for...in 并不能够保证返回的是按一定顺序的索引,但是它会返回所有可枚举属性,包括非整数名称的和继承的。
因为迭代的顺序是依赖于执行环境的,所以数组遍历不一定按次序访问元素。 因此当迭代那些访问次序重要的 arrays 时用整数索引去进行 for 循环 (或者使用 Array.prototype.forEach() 或 for...of 循环) 。
如果仅迭代自身的属性,而不是它的原型,那么使用 getOwnPropertyNames() 或执行 hasOwnProperty() 来确定某属性是否是对象本身的属性 (也能使用propertyIsEnumerable)。另外,如果你知道外部不存在任何的干扰代码,你可以扩展内置原型与检查方法。
//例子var triangle = {a:1, b:2, c:3};function ColoredTriangle() { this.color = "red";}ColoredTriangle.prototype = triangle;var obj = new ColoredTriangle();for (var prop in obj) { //判断是否为自身属性 if( obj.hasOwnProperty( prop ) ) { console.log("o." + prop + " = " + obj[prop]); } }// Output:// "o.color = red"
2.for...of语句
for...of语句在可迭代对象(包括 Array, Map, Set, String, TypedArray,arguments 对象等等)上创建一个迭代循环,对每个不同属性的属性值,调用一个自定义的有执行语句的迭代挂钩。
//迭代 Array:let iterable = [10, 20, 30];for (let value of iterable) { value += 1; console.log(value);}// 11// 21// 31//迭代 String:let iterable = "boo";for (let value of iterable) { console.log(value);}// "b"// "o"// "o"//迭代Map:let iterable = new Map([["a", 1], ["b", 2], ["c", 3]]);for (let entry of iterable) { console.log(entry);}// ["a", 1]// ["b", 2]// ["c", 3]for (let [key, value] of iterable) { console.log(value);}// 1// 2// 3
3.for...in和for...of的区别
for...in循环会遍历一个object所有的可枚举属性。
for...of语法是为各种collection对象专门定制的,并不适用于所有的object.它会以这种方式迭代出任何拥有[Symbol.iterator] 属性的collection对象的每个元素。
Object.prototype.objCustom = function () {}; Array.prototype.arrCustom = function () {};let iterable = [3, 5, 7];iterable.foo = "hello";for (let i in iterable) { console.log(i); // 0, 1, 2, "foo", "arrCustom", "objCustom"}for (let i of iterable) { console.log(i); // 3, 5, 7}
4.forEach
//参数:数组内容,数组索引,数组本身[].forEach(function(value, index, array) { // ...},this);//this可选
5.map
原数组被“映射”成对应的新数组
[].map(function(value, index, array) { // ...});
6.forEach和map的区别
两个方法都是ES5中Array引进的新方法。
- forEach没有返回值,map返回一个新数组
- forEach不能链式调用,map可以
没有办法终止或者跳出forEach()循环,除非抛出异常,所以想执行一个数组是否满足什么条件,返回布尔值,可以用一般的for循环实现,或者用Array.every()或者Array.some();
总结
一般来说,遍历对象用for...in(最好先判断是否为自身属性),遍历数组用forEach(如果没有特殊操作的话)。
阅读全文
0 0
- js-循环的方法
- js跳出循环的方法
- js中三种时间循环的方法
- js常见循环方法
- js 中for in循环方法的使用
- js数组循环遍历数组内所有元素的方法
- js跳出循环的方法区别(break,continue,return)
- js跳出循环的方法区别(break,continue,return)
- JS数组循环遍历数组内所有元素的方法
- JS跳出循环的三种方法(break, return, continue)
- js跳出循环的方法区别(break,continue,return)
- 【转载】js跳出循环的方法区别(break,continue,return)
- 循环里面删除项的方法(适用C#、js、java等所有循环)
- js的for循环
- JS的循环语句
- js的for循环
- JS的循环语句
- js循环的demo
- Oracle的存储结构
- NYOJ 678 最小K个数之和
- JFinal+maven+freemarker 入门教程
- Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现
- spark rdd api详解(待补充版)
- js-循环的方法
- 大数(高精度)运算
- Android中将Activity转换成View使用.
- liunx安装和配置OpenVPN服务器
- c产生随机数
- Navicat for MySQL系列]Navicat如何使用
- 修改 Ops Manager 的安装和产品模板文件
- 开源ETL工具Kettle在win7下安装和配置笔记
- 学习笔记:ES6之数组扩展(重要)