1 结点数组一般来说用for循环式
ES5不然也能采用forEach,ES5具备结点数组机能的除了map、filter、some、every、reduce、reduceRight等,或者说她们的回到结论不那样。但采用foreach结点数组不然,采用break无法受阻循环式,采用return也无法回到到内层表达式。
Array.prototype.method=function(){
console.log(this.length);
}
var myArray=[1,2,4,5,6,7]
myArray.name="数组"
for (var index in myArray) {
console.log(myArray[index]);
}
2 for in结点数组的小毛病
1.index检索为数组型位数,无法间接展开欧几里得演算2.结点次序有可能并非依照前述数组的外部次序3.采用for in会结点数组大部份的可隐式特性,主要包括蓝本。比如永新县的蓝本方式method和name特性因此for in更适宜结点第一类,千万别采用for in结点数组。
因此除采用for循环式,怎样更单纯的恰当的结点数组达至他们的期许呢(即不结点method和name),ES6中的for of略胜一筹.
Array.prototype.method=function(){
console.log(this.length);
}
var myArray=[1,2,4,5,6,7]
myArray.name="数组";
for (var value of myArray) {
console.log(value);
}
for in结点的是数组的检索(即键名),而for of结点的是数组原素值。
for of结点的而已数组内的原素,而不主要包括数组的蓝本特性method和检索name
3 结点第一类
结点第一类 一般来说用for in来结点第一类的键名
Object.prototype.method=function(){
console.log(this);
}
var myObject={
a:1,
b:2,
c:3
}
for (var key in myObject) {
console.log(key);
}
for in 能结点到myObject的蓝本方式method,如果不想结点蓝本方式和特性不然,能在循环式外部判断一下,hasOwnPropery方式能判断某特性是否是该第一类的实例特性
for (var key in myObject) {
if(myObject.hasOwnProperty(key)){
console.log(key);
}
}
同样能通过ES5的Object.keys(myObject)获取第一类的实例特性组成的数组,不主要包括蓝本方式和特性
Object.prototype.method=function(){
console.log(this);
}
var myObject={
a:1,
b:2,
c:3
}
for..of适用结点数/数组第一类/数组/map/set等拥有迭代器第一类的集合.但无法结点第一类,因为没有迭代器第一类.与forEach()不同的是,它能恰当响应break、continue和return语句
for-of循环式不支持普通第一类,但如果你想迭代一个第一类的特性,你能用for-in循环式(这也是它的本职工作)或内建的Object.keys()方式:
for (var key of Object.keys(someObject)) {
console.log(key + ": " + someObject[key]);
}
结点map第一类时适宜用解构,比如;
for (var [key, value] of phoneBookMap) {
console.log(key + "s phone number is: " + value);
}
附:跳出循环式
foreach 无法终止或跳过循环式
for of 支持跳出循环式
const fruits = [Apple,Banana,Orange,Mango];
for(let fruit of fruits){
if(fruit === Orange){
break; //终止
}
console.log(fruit); // Apple Banana
}
for(let fruit of fruits){
if(fruit === Orange){
continue; //跳出循环式
}
console.log(fruit); // Apple Banana Mango
}