向我学习Javascript的for循环和for循环…在周期

向我学习Javascript的for循环和for循环…在周期
我们都知道在Javascript中提供迭代对象有两种方式:

对于周期;
在循环中;

一、循环

不足:

在每个周期中,将得到数组的长度。

终止条件应明确;

在for循环中,你可以遍历数组或对象的对象如参数和htmlcollection对象数组。流通的常用形式如下:
第二次最佳循环
对于(var i = 0;i < myarray.length;i++){
什么 / / MyArray {我}
}

这种循环的缺点是,数组的长度是获得每一次的周期循环。这个时候减少你的代码的性能,尤其是当MyArray不是数组,而是一个htmlcollection对象。

htmlcollections是指物体通过DOM方法返回,例如:

document.getelementsbyname()

document.getelementsbyclassname()

document.getelementsbytagname()

还有一些其他的htmlcollections,其中介绍了在DOM标准仍在使用。是uff1a

在document.images所有图片元素:页面

document.links:所有的标签元素

document.forms:所有形式

文档:表单{ 0 }:元素:页面上第一个表单中的所有字段

收集的麻烦在于它们实时地查询基本文档(HTML页面),这意味着每次访问任何集合的长度时,都希望实时查询DOM,而DOM操作通常是昂贵的。

这就是为什么当您获得循环的值时,缓存数组(或集合)的长度是一个更好的形式,如下代码所示:
对于(var i = 0,最大值为myarray.length;我<最大;i++){
什么 / / MyArray {我}
}

这样,您只在这个周期中检索其中一个长度值。

在所有浏览器的缓存htmlcollections长度是更快,2次(safari3)到190倍(IE7)当内容流通。这似乎是很老的 /数据

注意,当您显式希望修改循环中的集合(例如,添加更多DOM元素)时,您可能喜欢长度更新而不是常量。

使用单个var表单,可以将变量从循环中取出,如下所示:
函数活套(){
var I=0,
最大值,
MyArray = { };

为(i = 0,最大值为myarray.length;我<最大;i++){
什么 / / MyArray {我}
}
}
这种形式具有一致性的优势,因为你坚持一个单一的变量形式。缺点是当代码被重建,它是复制和粘贴整个环路的一点点困难。例如,如果你复制一个周期从一个功能到另一个,你必须确保你能介绍我马克斯为新的功能(如果你不在这里,使用它们你可能删除它们从原来的功能)。

最后一个需要对循环进行调整的是用以下表达式之一替换。
i = i + 1
我= 1
JSLint提示您这样做,原因是升职+ +和困难(过分棘手)。如果你忽略它直接对JSLint的正正选择将假(默认是默认的)。

两种形式的变化:

少一个变量(没有max)
倒数0,通常更快,因为比较数组长度或其他不是0的长度比0更有效率。
第一个变化的形式 :

var i,MyArray = { };
对(我= myarray.length;我--;){
什么 / / MyArray {我}
}

第二个while循环:

VaR MyArray = { },
我= myarray.length;
当(i -){
什么 / / MyArray {我}
}

这些小的改进只是在性能和使用JSLint抱怨我—。

二,为…的循环-也被称为枚举

for…for循环通常用于迭代对象的属性或数组的每个元素,for…for循环中的循环计数器是一个字符串,而不是一个数字。它包含当前属性的名称或当前数组元素的索引。

当一个对象被遍历时,变量i是循环计数器作为对象的属性名:
在通过对象属性的循环中使用..
varperson = {
名称:admin
年龄:21岁,
地址:山东
};
对于(var本人){
console.log(我);
}

执行的结果如下:

名称
年龄
地址

当遍历数组时,变量i是循环计数器的索引,作为当前数组元素。
在循环中使用..遍历数组。
vararray = { 管理
对于(数组中的变量){
console.log(我);
}

实施结果:







但现在看来…在循环中非常好,但不要太高兴地看下面的例子:
数组
将一个name属性添加到数组原型中
阵列。原型。名称=zhangsan;
对于(var在数组中){
警报(数组{ });
}
运行结果:

行政
经理

DB

zhangsan

嘿,奇迹,多出来的一张三平白无故

现在,使用for循环会是什么样子呢
vararray = { 管理
将一个name属性添加到数组原型中
array.prototype.name =zhangsan;
对于(var i = 0;i < array.length;i++){
警报(数组{ });
};

运行结果:

行政

经理

DB

哦,现在我明白了..在循环遍历的方法和属性的一个原型,这可能会导致代码中的错误。为了避免这个问题,我们可以使用对象的hasownproperty()来避免这个问题的方法。如果对象的属性或方法不能继承,那么hasownproperty()方法返回true。这里的检验不涉及其他对象继承的属性和方法,只检查在特定的对象本身的属性直接创造的。
vararray = { 管理
阵列。原型。名称=嶂山;
对于(var在数组中){
如果不是直接创建的对象本身属性(即,属在原型 /属性)中,则跳过显示。
如果(array.hasownproperty(I)){
警报(数组{ });
}
}
运行结果:

行政
经理
DB

使用hasownproperty其他方式()是在object.prototype.like这uff1a取消方法
对象
var
手:2,
腿:2,
头:1
};
为(var在man){
如果(Object.prototype.hasOwnProperty.call(人、我)){ / /过滤器
console.log(我,:
}
}
其优点是避免命名冲突,当男人对象重新定义hasownproperty。这也避免了所有长属性查找对象的方法,你可以使用一个局部变量缓存。
我有自己的object.prototype.hasownproperty VaR,=;
为(我在人){
如果(hasown.call(人、我)){ / /过滤器
console.log(我,:
}
}
严格地说,不使用hasownproperty()是不是一个错误。根据任务和信心你对代码的程度,你可以跳过它提高一点速度环。但是当你不确定当前对象的内容(其原型链),加入hasownproperty()更安全。

格式化的变化(通过JSLint)会直接忽略括号把如果在同一行语句,优点是循环语句读起来像是一个完整的想法(每个元素都有自己的属性,X,和怎么做X):
警告: / /通过JSLint试验
我有自己的object.prototype.hasownproperty VaR,=;
(我为人)如果(hasown.call(人、我)){ / /过滤器
console.log(我,:
}
以上是Javascript提供的两种迭代对象的介绍:for循环和for…在环。我希望这篇文章能帮助你学习。

tag:循环学习周期向我电脑软件

相关内容