转一篇文章:
- <script type="text/javascript">
- var data = [1,2,2,8,6,8];
- data = unique(data);
- //alert(data.length);
- /*for(var i = 0 ; i < data.length ; i ++){
- alert(data[i]);
- }*/
- for(var i in data) {
- alert(data[i]);
- }
- function unique(data) {
- data = data || []; //意思是如果data是null 就赋值[]
- var a = {} ;//对象
- for( var i = 0,len = data.length ; i < len ;i ++) {
- var v = data[i];
- //如果typeof[a[v]]不等于undefined就说明已经存在这个值了 就不往a对象里面放值了
- //这样就保证了数组data中重复的值在a的下标中只存在一个
- if('undefined' == typeof(a[v])) {
- a[v] = 1; //随便赋值一个 因为这里只要下标 值无关紧要
- }
- }
- //重置数组
- data.length = 0;
- //往数组中添加值
- for(var i in a){
- //这里数组的长度会增加
- data[data.length] = i;
- }
- return data;
- }
上面涉及到的两个重点的东西:1.for in 循环 2.作为关联数组的对象(上面的对象a)
简单介绍下for in循环>>>
语法: for(variable in object) {
statement
}
variable可以是 声明的一个var的变量 数组的一个元素 或者是对象的一个属性
循环过程中 会对主体object的每一个属性执行一次,把属性名以字符串的形式赋值给variable变量 这里就可以用"[]"
运算符获得属性值
for/in循环 遍历对象的下标和值(取值的时候用[]运算符 这里不能用obj.xx属性 不然得到的会是undefined)
var obj = {x:1,y:2,z:3};
for(var i in obj) {
alert('下标>' + i + ": 值>" + obj[i]);
}
这里就涉及到了关联数组对象(等下关注)
javascript中的数组其实就是特殊的对象,对对象可以用for/in循环 对数组当然也不例外。。
2.关联数组的对象
var obj = {x:1,y:2,z:3};
我们可以通过 obj.x obj.y obj.z "."运算符来获取对象属性值,而"[]"多是用来存取数组的 但是以下两行代码是等价的:
object.property
object["property"]
区别在于>>前者的property是一个标识符 而后者则是一个字符串 。(这里估计有人迷糊了 有什么不同呢??)
java中一个对象的属性是固定的 不能在执行过程中动态添加属性,但是javascript中可以为对象创建任意数目的属性,当用"."来获取对象的属性值时,属性是一个标识符 而在javascript的标准中 标识符必须是逐个输入的,他们不是一种数据类型,程序是不能操作的。
而当用"[]"时候,属性是字符串 而字符串是javascript的一种数据类型,可以在程序运行过程中操作并创建的。。
就比如
var obj = {x1 : "sss", x2 : "ddd", x3 : "aaa"};
var str = "";
for(var i = 1; i <= 3 ;i++) {
str += obj["x" + i]; //能通过字符串拼接的方式来访问 而不能通过obj.("x" + i)
}
alert(str);
还比如上面的去除重复的例子:
var a = {};
var key = "name";
a[key] = "ganjp";
alert(a.name);
for(var n in a) {
alert(a[n]);
}
可以通过这种方式 增加属性
这里for/in的强大之处 也体现出来了 如果没有for/in我们在不知道属性的情况下 根本不可能去获取所有的属性、