1. 程式人生 > >JavaScript的進階之路(三)引用類型之Object類型和Array類型

JavaScript的進階之路(三)引用類型之Object類型和Array類型

reverse 代碼 -1 替換 fine 設置 sha unshift sum

引用類型

Object類型

function a(num){
				if(num>3){
					a(--num);  
				}
				console.log(num);   
			}
			a(5);
			//如何創建對象的實例
			var obj1= new Object();
			console.log(obj1);
			obj1.name="吳瓊";
			obj1.age=28;
			console.log(obj1.name+" "+obj1.age);
			//對象字面量語法 ,有點封裝的感覺
			var obj2 = {
				name:"吳瓊",
				age:28
			};
			var obj3 = {
				age:28,
				age_wo:30
			};
			console.log(obj3["age_wo"]);
			console.log(obj2.name+" "+obj2.age);
			function show(arg){
				var s="";
				if(arg.name != undefined){
					console.log(arg.name);
				}else{
					console.log("沒有這個名字");
				}
			}
			show(obj3);
			show(obj1);

  

Array類型

ECMAScript中數組中的每一項可以保存任何類型的數據。而且,數組的大小是可以自動調整的。

設置數組的長度array.length=2;小於數組長度則移除數組中的項,大於數組的長度則添加undefined項

數組的長度是:array.length;數組最後一項的下標是:array.length-1

數組的方法

檢測數組

ECMAScript3 instanceof
ECMAScript5 Array.isArray() IE9以上支持
準確檢測數組方法:22.1.1

轉換方法

toString() \ valueOf() \ toLocalString() \ join()

棧方法:棧是一種後進先出的數據結構。

push() 返回新數組的長度 pop()返回從數組最後移除的項

隊列方法:先進先出。

unshift()返回新數組的長度 shift() 返回從數組前端移除的項

重排序方法:reverse() sort() 他們的返回值是經過重新排序的數組。

reverse()反轉數組項的順序,但不夠靈活 sort()方法默認從小到大排序,原理是調用每一項的toString()方法,然後比較字符串

操作方法:concat()連接數組 slice()截取數組 splice()刪除、插入、替換數組中的項

concat()創建一個新數組,不影響原數組。
slice()創建一個新數組,不影響原數組,參數為下標,1個的時候從下標位置到最後,2個的時候第二個下標不包含。
splice()創建一個新數組,影響原數組。返回從原數組中刪除的項,如果沒有刪除項則返回空數組

操作方法是否可以理解為:從已知數組中取一些有用的項組成一個新的數組,便於我們去操作呢

位置方法:IE9+ indexOf() lastIndexOf() 查找特定項在數組中的位置,沒有返回-1(判斷數組中是否含有某一項)

ECMA5為數組定義了5個叠代方法:(IE9+)都有2個參數:給定函數和運行該函數的作用域--影響this的值。給定函數有3個參數 項 下標 數組

1、every() 每一項都符合給定函數則返回true
2、some() 只要有一項符合給定函數則返回true
3、filter() 找出符合給定函數的項,組成新的數組
4、map() 返回運行給定參數的結果,組成新的數組
5、forEach() 沒有返回值,只是對數組中的每一項運行給定函數

ECMA5縮小方法:(IE9+)reduce() reduceRight() 適用於求值運算

//關於數組
			//創建數組和存取數組
			var arr1=new Array();
			arr1=[1,2,3];
			var arr2=[];
			var arr3=["吳瓊",2,"str",{name:"吳瓊",age:28}];
			arr2[0]=1;
			arr1[3]=4;
			arr1[arr1.length]=5;
			console.log(arr1);
			console.log(arr1[arr1.length-1]);//最後一項的索引始終是length-1
			console.log(arr2);
			console.log(arr2[0]);
			console.log(arr3);
			console.log(arr3[3].name);
			if(arr1 instanceof Array){
				console.log("arr1 是數組");
			}else{
				console.log("arr1 不是數組");
			}
			if(Array.isArray(arr2)){
				console.log("arr2 是數組");
			}else{
				console.log("arr2 不是數組");
			};
			console.log(arr1.toString());
			console.log(arr1.toLocaleString());
			console.log(arr1.valueOf());
			console.log(arr1.join("/"));
			//alert(arr1.join());  //後臺自動調用arr1.toString();
			console.log(arr1.push(6,7,"8","pop()這個項"));//返回新數組的長度
			console.log(arr1);
			console.log( arr1.pop());  //返回取出來的項
			
			console.log(arr1);
			var arr4=new Array();
			console.log(arr4.unshift(1,2));  //返回新數組的長度 2	
			console.log(arr4);
			console.log(arr4.shift());
			console.log(arr4);
			console.log(typeof arr4.shift());
			console.log(arr4);
			var arr5=[0,5,15,10,20,"a","b",30];
			console.log(arr5.reverse()); //改變了原數組 
			console.log(arr5.sort());    //[0,10,15,20,5]  轉變為字符串比較後的排序結果
			console.log(arr5.sort(function(a,b){return a>b}));
			var colors=[1,2,3];
			var colors2=colors.concat(4,[5,6]);
			console.log(colors2);  //返回一個新數組
			var colors3=colors2.slice(1);    
			var colors4=colors2.slice(1,5); 
			var colors5=colors2.slice(1,colors2.length-1);
			console.log(colors3);
			console.log(colors4);
			console.log(colors5);
			var cars =["奔馳","寶馬","奧迪"];
			var cars1 =cars.splice(0,1);   //刪除奔馳
			console.log(cars);
			console.log(cars1);
			var cars2 = cars.splice(0,1,"奔馳","別克");//替換寶馬
			console.log(cars);
			console.log(cars2);
			var cars3 = cars.splice(2,0,"大眾"); //插入大眾
			console.log(cars);
			console.log(cars3);
			var age={name:"wq"};
			var age1=[{name:"wq"},2,{a:2,b:3}];
			if(!Array.indexOf){
             		Array.prototype.indexOf = function(el){
             		    for (var i=0,n=this.length; i<n; i++){
             			    if (this[i] === el){
             				    return i;
             		        }
             		    }
                        return -1;
                    }  
                }
			console.log(age1.indexOf({name:"wq"}));  //-1
			console.log(age1.indexOf(2));   //1
			console.log(arr1.indexOf({a:2,b:3}));//-1
			
			var iter=[1,2,3,4,3,2,1];
			var everyResult = iter.every(function(item,index,array){
				return item > 2;
			});
			console.log(everyResult);
			var someResult = iter.some(function(item,index,array){
				return item > 2;
			});
			console.log(someResult);
			var filterResult = iter.filter(function(item,index,array){
				return item > 2;
			});
			console.log(filterResult);
			var mapResult = iter.map(function(item,index,array){
				return item > 2;
			});
			console.log(mapResult);   //這個返回一個由布爾值組成的數組
			var mapResult1 = iter.map(function(item,index,array){
				return item * 2;
			});
			console.log(mapResult1);
			iter.forEach(function(item,index,array){
				//這裏執行一些代碼
				if(array[index]>2){
					console.log(item);
				}else{
					
				}
			});
			console.log(iter);
			var sum=iter.reduce(function(pre,cur,index,array){
				return pre + cur;
			});
			console.log(sum);

  

JavaScript的進階之路(三)引用類型之Object類型和Array類型