【JavaScript】in的使用,for循环in,和java的foreach循环的区别
最近疑惑js的in的使用了,特意百度了一下,特此记录笔记,以备后用。
警告:for…in有个缺陷,对数组的循环尽量避开使用 !!!
使用
for(var variable in obj) { ... }
其中,obj可以是个对象,也可以是个数组。
实验开始:
1. javascript的in循环对象:
上代码:
var array = [ 'a', 'b', 'c', 'd' ];
for ( var cha in array) {
console.log(cha);
}
console.log(3 in array);
控制台打印:
0
1
2
3
true
2. javascript的in循环数组:
var men = {};
men.name = '小丽';
men.sex = 0;
men.age = 18;
for ( var cha in men) {
console.log(cha);
}
console.log('name' in men);
控制台打印:
name
sex
age
true
结论
假设是循环js对象,那么在遍历中得到的是对象的属性的名字,而不是属性相应的值。
假设是循环js数组,那么在遍历中得到的是数组的下标。
延伸阅读
1、对被删除的属性使用in,会返回false;
2、对值为 undefined 的属性使用in,会返回true;
3、如果一个属性是从原型链上继承来的,in 运算符也会返回 true;
var men = {};
men.name = undefined;
console.log('name' in men); //true
delete men.name;
console.log('name' in men); //false
var array = [ 'a', 'b'];
console.log(1 in array); //true
delete array[1];
console.log(array[1]); //undefined
console.log(1 in array); //false
var obj = new Object();
obj.valueOf();
console.log("valueOf" in {}); //true
console.log("toString" in {}); //true
console.log("length" in {}); //false
和Java的不同:
1、用法:js用 in 特殊字符,java用 : 分号;
2、循环的值:js如果循环的是对象,得到的是下标;而java的foreach循环枚举一个数组或者任何实现了Iterable接口的对象的时候,得到的是下面的元素,而非下标;并且java的foreach循环不会枚举一个对象的属性。
<如有不足请指教,如觉得有用麻烦给个小心心哟^_^ >
---------------------------- The End -------------------------------