一个大型例子搞定 Javascript 的数组基础知识 ——总结《Javascript 权威指南》第六版数组基础知识

      有关 JS 数组的基础知识,在此总结一下。主要用一个例子加足够注释来说明和总结。


<script type="text/javascript" charset="utf-8">
	var arr0 = [];	// arr0 没有数组元素
	alert("for arr0 = [], arr0.length = " + arr0.length); // arr0.length = 0

	var arr1 = [1,2];
	
	var arr2 = [,,];
	for(var i=0; i<arr2.length; i++){
		alert("for arr2=[ , , ] , arr2[" + i +  "] = " + arr2[i]);
	} // undefined, 注意arr2.length 为 3

	// 可见 JS 中数组不要求数组元素类型一致, 最后的, 表明后面还有一个元素为 undefined
	var arr3 = [1.1 , true , "abc",];
	// arr3.length = 4,注意,长度为4,但是最后一个为 undefind
	alert("for arr3 = [1.1 , true , 'abc',],   arr3.length = " + arr3.length); 
	alert("arr3[3] = " + arr3[3]);

	// 数组元素可以是任何表达式或数组,对象
	var base = 123;
	var arr4 = [ base+1 , base+2 , [1,"hello"] , new Object() ];
	arr4[100] = "New";		// 添加元素后,自动更新length

	alert(" arr4[1] = " + arr4[1]);
	alert("after arr4[100],   arr4.length = " + arr4.length); 
	//101,可见数组长度并不一定等于数组元素个数

	alert("after arr4[100],   arr4[50] = " + arr4[50]);

	// 通过改变 length 截断数组
	arr4.length = 50;
	alert(" after arr4.length = 50 , the arr4[100] = " + arr4[100]);
	
	arr4[-1.23] = true;
	arr4["1000"] = 888;
	arr4[1.000] = 99;
	
	alert("arr4[1000] = " + arr4[1000]);
	alert(" arr4[1] = " + arr4[1]);
	alert("for  arr4 = [ base+1 , base+2 , [1,'hello'] , new Object() ] ,  the arr4[2][1] =  " + arr4[2][1]); //hello
	alert("for  arr4 = [ base+1 , base+2 , [1,'hello'] , new Object() ] ,  the arr4[4] =  " + arr4[4] + 
	",    and the type of arr4[3] is " + typeof(arr4[3]) ); // undefined, object
	alert("看到此句,表明数组不存在下标越界问题 arr4[9999999] = " + arr4[9999999]); // undefined
	
	var a = new Array();  // 等价于 new Array(0); 其中的整数参数代表数组元素个数
	alert("the type of a is Array :" + ( a instanceof Array));
	
	// 下面仅仅弹出 false, 因为 "the type of a is Array :"+ a 得到字符串(the type of a is Array :)
	// 然后才执行 instanceof ,于是返回 false
	alert("the type of a is Array :" +  a  instanceof Array); 
	alert("for a =  new Array() ,   a.length = " + a.length ); // 0

	// new Array(3) 和 [, , ] 其 length 都不为0,元素为 undefined
	// 不同于 new Array(), [], 它们的 length= 0, 元素都是不存在的。
	var b = new Array(3);
	alert("for b = new Array(3) b.length = " + b.length);
	
	var ar1 = [];
	ar1.push("one_1");
	ar1.push("two_2","three_3");
	ar1.unshift("zero_0");
	
	// unshift 方法是将其参数插入到调用数组的第一个位置上,原来数组的其他元素依次后移
	for(var i=0 ,len = ar1.length ; i<len; i++)  // 优化效率,避免每次都查询 length
		alert("after unshift : ar1[ " + i + "] = " + ar1[i] );
	
	// delete后,索引1位置上不再有元素,但是不影响数组长度
	// 而且此时,ar1[1] = undefined, 其他元素则不改变
	delete ar1[1];
	alert("after delete ar1[1] , ar1.length = " + ar1.length);

	var r1 = ["a","b","c"];
	r1.x = 99;	 //插入属性后,不同的遍历方式,输出不同
	r1[3] = "Kitty";

	for(var i=0; i < r1.length; i++){
		alert("for r1 , r1[" + i +"] = " + r1[i]); // 仅仅输出 a,b,c,kitty
	}
	
	for(var m in r1){
		alert("for r1, r1[" + m +"]= " + r1[m]); // 输出 a,b,c,99,kitty
	}

	// ECMAScript 5 定义的新遍历方式
	var data = [1,2,3,4,5];
	var sumOfSquares = 0;
//	if(data.hasOwnProperty("forEach")){  // 判断对象是否有其属性
//		data.forEach(function(x){
//		sumOfSquares += x*x;
//	});
	alert("sumOfSquare = " + sumOfSquare);	// 有其属性时,应该输出 55 (=1+4+9+16+25)
	
	// 下面的一些数组常用操作方法都继承自 Array.prototype
	// join,reverse,sort,concat,slice,splice,push,pop,shift,unshift,toString,toLocalString
	// forEach,map,filter,every,some,reduce,reduceRight,indexOf,lastIndexOf,
	//var array = [ 1, 2, 3 ];
	//a.join(); // join方法不指定分隔符时,默认用逗号分隔元素,返回拼接在一起的字符串
</script>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值