for in循环
for in: 用来遍历(循环)对象键值对的
var obj = {name: 'hello', age:8, 1: 'xxx', 3: 'xxx', 2: 'xxx', 2.5: 'xxx'};
对象中有多少组键值对,我们的FOR IN循环就遍历多少次
每一次循环key这个变量存储的都是当前循环这组键值对的属性名
1、key存储的值都是字符串格式的(不管属性名是否为数字)
2、在for in循环遍历的时候,大部分浏览器都是先把对象中的键值对
进行排序(把数字属性名的排在前面,并且排列的时候按照数字由小到大
排列),其次再把非数字的属性名按照之前编写的顺序排列,循环的时候
按照重新排列的顺序依次遍历。(小数算作字母,不算作数字)
for (var key in obj) {
console.log('ok');
console.log(typeof key); // string
console.log(key); // 1 2 3 name age 2.5
获取obj中key这个属性名对应的属性值
// console.log(obj.key); // 这种写法不对, 输出的是 undefined
// console.log(obj['key']); // 这种写法也不对, 输出的是 undefined
每一次循环把key变量存储的值(当前遍历的属性名)获取到放在中括号中,获取obj
中对应属性的属性值。
console.log(obj[key]); // key代表变量key,代表的是存储的值,
// 因为它存储的值,就有可能是字符串
// break;
}
如果加了break, 那么只循环一次。
key代表的是属性名
获取obj中对应属性名的属性值的正确写法:
console.log(obj[key]); // 因为key代表的是变量key
以后的for in循环这么写:
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
...
}
}