for...in 语句用于对数组或者对象的属性进行循环操作(转自自w3c),
语法:
for
(变量in
对象) { 在此执行代码 }
之前一直忽略这种很牛逼的控制符 今天碰到面向对象以后 发现js有“引用”这个特性以后 就好好恶补了一下。
关于js的引用特性
如下代码:
<script>
var arr1=[1,2,3];
var arr2=arr1;
arr2.push(4);
alert(arr1);
alert(arr2);
</script>
一个数组arr1赋值给arr2以后 对arr2数组进行push()方法来让数组末尾增加一个4,运行以后 无论是arr1还是arr2 alert出来的结果都是1,2,3,4
这就是js里的引用特性 ,这就好比一栋房子 A搬进去住了他挪了沙发 B搬进去住了 挪了电视机 最后你进去看房子 会发现电视机和沙发动了。
那如果不希望这个arr1改变的话 怎么解决呢?
这时候就用到了这个for in 遍历循环 代码如下:
<script>
var arr1=[1,2,3];
var arr2=[];
for(var i in arr1)
{
arr2[i]=arr1[i];
}
arr2.push(4);
alert(arr1);
alert(arr2);
</script>
运行以后arr1仍然是1,2,3 而arr2则变成了1234 for in遍历相当于把整个arr1复制了一遍 然后再传递给arr2 所以 此时的arr1也就完全不受影响了 (ps:各大公司在面试的时候经常会考引用)
js面向对象
目前为止仍然一头雾水 只怪那个this太诡异..... 今天试用了一下把之前的一些面向过程的小程序改写成面向对象 各种bug各种飞 续更........(to be continued)