for in的使用
关于for in这个的使用场景:
1.遍历数组,变量里面存储的是字符串类型的索引
2.遍历对象,变量里面存储的是对象的key值
3.遍历字符串,变量里面存储的是字符串类型的索引
4.遍历undefined,null,'',0,false(不会报错)
注意事项:
1.在遍历数组时,for in会遍历数组所有可枚举的属性(包括原型,可以通过hasOwnProperty进行判断)
2.在遍历对象时,for in会遍历对象所有可枚举的属性(包括原型,可以通过hasOwnProperty进行判断)
3.如何跳出for in循环,使用break和continue
代码示例:
var arr = [11,22,33]
for(var i in arr){
console.log(typeof i,i) // string 0,string 1,string 2
}
var obj = {
name:'zq',
age:18
}
for(var i in obj){
console.log(i) //name,age
}
var str = 'abc'
for(var i in str){
console.log(i)// 0,1,2
}
var specObj1 = null;
for(var i in specObj1){ // 不会报错
console.log(i)
}
var specObj2 = undefined;
for(var i in specObj2){ // 不会报错
console.log(i)
}
var specObj3 = '';
for(var i in specObj3){ // 不会报错
console.log(i)
}
var specObj4 = false;
for(var i in specObj4){ // 不会报错
console.log(i)
}
var specObj5 = 0;
for(var i in specObj5){ // 不会报错
console.log(i)
}
console.log('注意事项')
// 1.for in 会遍历数组原型上的可读属性
var array = ['z','q']
array.age = 18;
Array.prototype.a = 123;
console.log(array instanceof Array) // true ['z','q',age:18],这是个数组吗?
console.log(array) // ['z','q',age:18],这是个数组吗?true
console.log(Array.isArray(Array)) // false(这个网上说是不准确的)
console.log(Array.isArray(array)) // true
console.log(Object.prototype.toString.call(arr)); // [object Array]
for(var i in array){
console.log(i) // 0,1,age,a
if(array.hasOwnProperty(i)){
console.log(i) // 0,1,age
}
}
// 2.for in 会遍历对象上的可读属性吗?会
var object = {
name:'z',
age:1
}
Object.prototype.sex = '女'
for(var k in object){
console.log(k) // name,age,sex
if(object.hasOwnProperty(k)){
console.log(k) // name,age
}
}
// hasOwnProperty不会检查原型链上的属性
console.log(Object.hasOwnProperty('hasOwnProperty')) // false
console.log(Object.prototype.hasOwnProperty('hasOwnProperty')) // true
//3. for in 如何跳出循环?
var jump = [1,2,3]
for(var i in jump){
if(i == 1){
console.log(i);
//return;// Illegal return statement (at
// return true;// Illegal return statement (at
//break; // ok跳出整个循环,// 执行,1
continue;// 跳出本次循环
}
console.log('执行')
}