在for循环中,设置变量区域为父级区域,循环体内为子级区域
- 常规写法:这种写法比较常用,index为数字(number),操作下标,与for…of相比,缺点,无法识别大于0xFFFF的码点
var arr=[1,2,3,4,5];
for(let index=0;index<arr.length;index++){
console.log(index+","+arr[index]);
} //0,1//1,2//2,3//3,4//4,5
// 0x20BB7:"𠮷"
let s=String.fromCodePoint(0x20BB7);
for (let i = 0; i < s.length; i++) {
console.log(s[i]);
}//打印出两个未知字符//�//�
function f(){
for(let index=0;index<arr.length;index++){
if (index === 3) {
return "找到了位置3,终止循环";
}
console.log(index+","+arr[index]);
}
}
console.log(f());//0,1//1,2//2,3//找到了位置3,终止循环
String.fromCharCode(code)方法可以实现把码点转成字符打印,但是无法识别大于0xFFFF的码点,而ES6出现了fromCodePoint(code1,code2,code3,…),并且该方法可以同时传入多个参数,会自动对参数进行字符串拼接。
- forEach:ES5出现的方法,index即为元素的值,会自适应值的类型,与原始for循环相比,缺点,无返回值,并且无法跳出循环,break命令或return命令都不能奏效。
function f() {
arr.forEach(function(index) {
console.log(typeof(index));
if (index === 3) {
return "找到了位置3,终止循环";
}
console.log(index);
});
}
console.log(f());//1//2//4//5//undefined
3.for…in:ES5出现的方法,适合操作对象,该index为字符串(string),操作下标或为key
for(let index in arr){
console.log(typeof(index));//string
console.log(arr[index]);//1,2,3,4,5弱类型语言的兼容太强,最好不要这样做
}
let obj={a:1,b:2,c:3}
for (let index in obj){
console.log(index);//a,b,c
console.log(obj[index]);//1,2,3//读取对象值的方式
}
let cars = new Array()
cars[0] = 'Saab'
cars[1] = 'Volvo'
cars[3] = 'BMW'
for (let index in cars) {
console.log(typeof(index)); //string
console.log(index + "," + cars[index]);
} //0,Saab//1,Volvo//3,BMW
for (let index = 0; index < cars.length; index++) {
console.log(typeof(index)); //number
console.log(index + "," + cars[index]);
} //0,Saab//1,Volvo//2,undefined//3,BMW
4.for…of,ES6写法,支持数组,类数组对象(如:NodeList对象),Map,Set,字符串等,index即为元素的值,会自适应值的类型,但解析对象必须拥有遍历器(Iterator)接口。常用来解析字符
for(let index of arr){
console.log(typeof(index));//number
console.log(index);//1,2,3,4,5
}
let s=String.fromCodePoint(0x20BB7);
for (let index of s){
console.log(typeof(index));//string
console.log(s);//"𠮷"
}