在JavaScript循环语句中,for 和for.in 循环哪个效率更高

JavaScript038

在JavaScript循环语句中,for 和for.in 循环哪个效率更高,第1张

for的效率比for in高

for in需要调用js的Iterator对对象的属性进行枚举,然后再执行循环

for的是直接通过index索引到object的指针

优点: 遍历的时候更加简洁,效率和for循环相同,不用关心集合下标的问题,减少出错的效率

缺点: 不能同时遍历多个集合,在遍历的时候无法修改和删除集合数据,方法不能使用break,continue语句跳出循环,或者使用return从函数体返回,对于空数组不会执行回调函数

forEach不可遍历对象,这也是和for in的区别

优点: 可以遍历数组的键名,遍历对象简洁方便

缺点: 某些情况下,会出现随机顺序的遍历,因为里面的值是string类型,所以增加了转换过程,因此开销比较大

优点: 避免了for in的所有缺点,可以使用break,continue和return,不仅支持数组的遍历,还可以遍历类似数组的对象,支持字符串的遍历,最直接的遍历数组的语法,支持map和set对象遍历

缺点: 不适用于处理原有的原生对象

优点: 程序简洁,结构清晰,循环初始化,循环变量化,循环体和循环条件位置突出

缺点: 结构比while循环复杂,容易出编码错误

for(in)的效率极差,因为他需要查询散列键,只要可以就应该尽量少用

一楼的只说出了一个特殊的情况-数组,其实所有对象都可以应用for。。。in的

七主要作用为遍历对象的所有属性,下面给出一个实例

<html>

<head>

<title>一个使用到for...in循环的Javascript示例</title>

</head>

<body>

<script type="text/javascript">

// 创建一个对象 myObject 以及三个属性 sitename, siteurl, sitecontent。

var myObject = new Object()

myObject.sitename = "布啦布啦"

myObject.siteurl = "blabla.cn"

myObject.sitecontent = "网页教程代码图库的中文站点"

//遍历对象的所有属性

for (prop in myObject)

{

document.write("属性 '" + prop + "' 为 " + myObject[prop])

document.write("<br>")

}

</script>

</body>

</html>

for(声明:表达式)

语句

声明 是一个变量,例如 Object listElement。这个变量应该有自己的类型,这样,它就可以与将遍历的列表、数组或集合中的每一个项兼容。

表达式 就是一个表达式。它计算的结果应当是可以遍历的。在现在,只要保证表达式 计算的结果是一个集合或者数组就可以了。表达式可以简单到就是一个变量,或者是一个方法调用(例如 getList()),亦或是包含布尔逻辑或三目运算符的复杂表达式。只要它返回一个数组或集合,就一切 OK。

语句 代表循环的内容,它对声明 中定义的变量进行操作;当然,这是一个循环,所以语句 将应用到数组中集合的每个项目上。而且,使用大括号({ 和 })时,还能使用多条语句。

其用法如下:创建一个变量,指向要遍历的数组或集合,然后对定义的变量进行操作。不用对列表中的每个项目进行赋值,因为 for/in 替您处理了这件事。