javascript
JavaScript对象和数组
在JavaScript中對象是一種數(shù)據(jù)結(jié)構(gòu),用于將數(shù)據(jù)和功能組織在一起,描述一類對象所具有的屬性和方法。
對象是某個特定類型的實(shí)例。新對象是new操作符后跟一個關(guān)鍵字來實(shí)現(xiàn)的。構(gòu)造函數(shù)本身就是一個函數(shù),用于創(chuàng)建新對象。 var person = new Object();這行代碼創(chuàng)建了一個Object的實(shí)例,并將值保存了變量person中。
創(chuàng)建對象的方式有兩種,一種是通過Object函數(shù)來創(chuàng)建。
var animal = new Object();animal.eat=function(){console.log("eat");};animal.color="blue";上面的代碼通過object創(chuàng)建了對象animal,并創(chuàng)建了對象的方法eat以及屬性color。
同時可以通過字面量的方式創(chuàng)建對象。
var animal={eat:function(){console.log("eat");},color:"blue"}上面通過字面量的方式創(chuàng)建了新對象animal,并創(chuàng)建了方法eat和屬性color。通過字面量創(chuàng)建的對象,并不會調(diào)用Object函數(shù)。對象可以作為參數(shù)傳遞至函數(shù)中使用。
function test(args){console.log("Name:"+args.name+"\n");console.log("age:"+args.age+"\n");}test({"name":"haha","age":18});函數(shù)test接收了args參數(shù),args是一個對象。在函數(shù)中可以直接訪問對象的屬性。這種情況適合向函數(shù)傳遞大量的可選參數(shù)情況。
function Person(options){//Jquery 的extend方法,用于合并參數(shù)this.options=$.extend(true, {"name":"zhang"},options);console.log(this.options);}var perosn = new Person({"name":"ge","age":18,"sex":"man"});上面的代碼定義了Person函數(shù),并且為person傳遞了大量的對象。同時在函數(shù)內(nèi)部有默認(rèn)的對象,用jquery的extend方法進(jìn)行參數(shù)的合并。
一般情況下,訪問對象的屬性通過操作符.來訪問,不如person.name。訪問對象的方法也通過.來調(diào)用,比如person.eat()。訪問對象的屬性還有另外一種訪問方式,通過下標(biāo)的方式訪問,比如person["age"]。
有些對象的屬性包含一些特殊字符,不能通過操作符(.)來訪問,必須通過中括號的方式來訪問,比如“first name”,這個屬性有空格,必須通過中括號訪問。person["first name"]。
JavaScript中的數(shù)組與其他高級語言有很大的區(qū)別,數(shù)組中存放不同類型的值,可以在數(shù)組的第一個位置存放Number,第二個位置存放布爾值。創(chuàng)建數(shù)組也有兩種基本的方式,比如 var array = new Array();
如果預(yù)先知道數(shù)組的長度,可以 var array = new Array(20);也可以向數(shù)組中傳遞參數(shù), var array = new Array("red",20,true);當(dāng)我們只傳遞一個參數(shù)時候就比較復(fù)雜了,如果傳遞的是數(shù)值,則創(chuàng)建該長度的數(shù)組,如果傳遞的是字符串,則創(chuàng)建包含這個值的數(shù)組。
創(chuàng)建數(shù)組的另一種方式是通過字面量的方式創(chuàng)建數(shù)組。
var array=[];var array1=["blue",1,true];
訪問數(shù)組的方式通過[]下標(biāo)的方式訪問的,比如 array1[0],輸出第一項(xiàng)的值;rray1[1],輸出第二項(xiàng)的值;array[2]="hehe",修改了第三項(xiàng)的值;array[3]="en",添加新的數(shù)組元素。方括號中的索引表示要訪問的值。數(shù)組的長度保存在length中。
通過 instanceof,以及isArray可以判斷一個對象是否是數(shù)組,比如 array instanceof Array,array.isArray()
var array=["blue","red","yellow"]; console.log(array.toString());//輸出blue,red,yellow console.log(array.join(";"));//輸出blue;red;yellowtoString()方法將數(shù)組轉(zhuǎn)換為String,通過操作符逗號分隔數(shù)組元素。同時數(shù)組提供了join方法可以指定字符來分隔數(shù)組元素。
var array=["blue","red","yellow"]; console.log(array.toString());//輸出blue,red,yellow console.log(array.join(";"));//輸出blue;red;yellow var str = array.toString();// var narray= str.split(",");//["blue","red","yellow"]; console.log(narray[0]);//輸出blue上述代碼展示split的用法,split可以字符串轉(zhuǎn)換為數(shù)組。通過指定的分隔符,將字符串轉(zhuǎn)換為數(shù)組。
數(shù)組提供了一組方法,使數(shù)組使用和其他的數(shù)據(jù)結(jié)構(gòu)一樣。數(shù)組可以表現(xiàn)的像棧一樣,可以限制插入和刪除。棧是一種后進(jìn)先出的數(shù)據(jù)結(jié)構(gòu),最新添加的項(xiàng)最早被移除。插入和刪除都發(fā)生在棧的頂部。數(shù)組提供了push和pop方法。
push方法接收任意數(shù)量的參數(shù),將他們逐個添加到數(shù)組的末尾,并返回?cái)?shù)組的長度。pop方法可以從數(shù)組的末尾刪除一項(xiàng),并返回移除的項(xiàng)
var array=[]; console.log(array.length);//0 array.push("red"); console.log(array.length);//1 array.pop(); console.log(array.length);//0上面的代碼,定義了一個數(shù)組array,并通過push方法添加了一項(xiàng),數(shù)組的長度為1,通過pop方法刪除了一項(xiàng),數(shù)組的長度為0.
隊(duì)列的數(shù)據(jù)結(jié)構(gòu)是先進(jìn)先出,數(shù)組同樣可以表現(xiàn)的像隊(duì)列一樣,實(shí)現(xiàn)元素的先進(jìn)先出。隊(duì)列在末尾添加元素,在列表的前端移除數(shù)據(jù)項(xiàng)。push方法可以向數(shù)組的末端添加數(shù)據(jù)元素,shift方法可以移除數(shù)組的第一項(xiàng),并返回,同時數(shù)組長度減1.
var array=[]; array.push("red"); array.push("blue"); array.push("green"); array.shift(); console.log(array.toString());//blue,green上面的代碼定義了一個數(shù)組array,并通過push方法添加了三項(xiàng)元素,最好通過shift方法刪除數(shù)組的第一項(xiàng),最后數(shù)組只有兩項(xiàng),toString()方法輸出。
數(shù)組的重新排序有兩個方法reverse和sort。reverse就是數(shù)組元素反轉(zhuǎn),sort方法將數(shù)組進(jìn)行升序排列,首先要將數(shù)組的元素調(diào)用toString方法,然后再進(jìn)行排序。
var array=[1,7,5,3,2]; array.reverse(); console.log(array.toString());//2,3,5,7,1 array.sort(); console.log(array.toString());//1,2,3,5,7 var array =[1,3,5,7,9,11]; array.sort(); console.log(array.toString());//輸出1,11,3,5,7,9?
通過上面的代碼,我們發(fā)現(xiàn)sort方法的排序有時候并不是我們想要的結(jié)果,所以sort方法提供了傳遞函數(shù)作為參數(shù)的方法。通過傳遞函數(shù)我們能夠?qū)崿F(xiàn)數(shù)值的升序以及降序排列。
function compareMax(v1,v2){if(v1<v2){return -1;}else if(v1>v2){return 1}else{return 0;}}//降序function compareMin(v1,v2){if(v1<v2){return 1;}else if(v1>v2){return -1;}else {return 0;}}var array= [1,3,11,7,2,10];array.sort(compareMax);console.log(array.toString());//1,2,3,7,10,11 array.sort(compareMin);console.log(array.toString());//11,10,7,3,2,1比較函數(shù)接收兩個參數(shù),如果第一個參數(shù)應(yīng)該在第二個參數(shù)之前則返回負(fù)數(shù),如果第一個參數(shù)應(yīng)該位于第二個參數(shù)之后則返回整數(shù),兩個數(shù)相等返回0.
//升序排列function compareMax(v1,v2){/*if(v1<v2){return -1;}else if(v1>v2){return 1}else{return 0;}*/return v1-v2;}//降序function compareMin(v1,v2){/* if(v1<v2){return 1;}else if(v1>v2){return -1;}else {return 0;}*/return v2-v1;} View Code通過上面的兩個函數(shù)同樣可以實(shí)現(xiàn)升級和降序排列。
?JavaScript的數(shù)組還包含許多其他常用的方法。concat方法基于當(dāng)前的數(shù)組,形成一個新的數(shù)組,并不改變原數(shù)組的值。concat的參數(shù)可以一個或者多個數(shù)組,可以不是數(shù)組。如果不是數(shù)組,則在原數(shù)組的末尾添加一個新的元素,形成新的數(shù)組。如果是數(shù)組,則會將數(shù)組的每一項(xiàng)添加到新的數(shù)組中,形成新的數(shù)組。
var array=["1",2]; var array1=array.concat(["3",4]); console.log(array.toString());//輸出1,2 console.log(array1.toString());//輸出1,2,3,4上面的代碼可以看出通過concat生成了新的數(shù)組,原數(shù)組的值并沒有發(fā)生改變。
slice方法能夠基于當(dāng)前數(shù)組的一項(xiàng)或者多項(xiàng)創(chuàng)建一個新的數(shù)組,不會改變原始數(shù)組。slice方法有一個或者兩個參數(shù),表示數(shù)組下標(biāo)的起始和結(jié)束的位置,不包括結(jié)束位置。如果只有一個參數(shù),則從開始位置一直到數(shù)組結(jié)束。
var array=["blue","red","green","black","white"]; var array1=array.slice(1,3); var array2=array.slice(1); console.log(array1.toString());//red,green console.log(array2.toString());//red,green,black,white如果slice參數(shù)有負(fù)數(shù),則用數(shù)組長度加上該負(fù)數(shù),如array.slice(-2,-1),則array.slice(3,4)相當(dāng)。如果起始位置大于結(jié)束位置,則返回空數(shù)組。
splice方法可以向數(shù)組的中部插入元素,splice可以實(shí)現(xiàn)數(shù)組的插入、刪除和替換。刪除需要指定兩個參數(shù),要刪除第一項(xiàng)的位置,要刪除的項(xiàng)數(shù)。如splice(1,3),從數(shù)組第二項(xiàng)開始,刪除三個數(shù)組元素。splice插入方法至少傳遞三個參數(shù),第一要插入元素的位置,第二個要刪除的項(xiàng)數(shù)(0),第三個參數(shù)要插入的元素,如果要插入多項(xiàng),可以有第四個參數(shù)。。。。
splice的替換方法也至少需要三個參數(shù),第一個參數(shù)元素要刪除的位置,第二個參數(shù)刪除的項(xiàng)數(shù),第三個參數(shù)插入的元素。
var array=["red","green","blue","white","black"]; var array1=array.splice(1,1);//array被刪除一項(xiàng)["red","blue","white","black"] var array2=array.splice(1,0,"green");//["red","green","blue","white","black"] var arrays=array.splice(1,1,"yellow");//["red","yellow","blue","white","black"]上面的代碼講述了splice方法的刪除、插入、替換方法的使用。
數(shù)組的indexOf方法可以查找某個元素在數(shù)組的位置,如果數(shù)組中部存在該元素,則返回-1.
var array=["red","green","blue","white","black"]; console.log(array.indexOf("green"));//1 console.log(array.indexOf("orange"));//-1JavaScript為數(shù)組提供了5個遍歷的方法,分別是every、fillter、forEach、map和some方法。every方法對數(shù)組的每一項(xiàng)運(yùn)行給定的函數(shù),如果該數(shù)組的每一項(xiàng)對函數(shù)都返回true,則返回true。
some方法與every方法類似,但是some方法只要有一項(xiàng)滿足函數(shù),就返回true。
var array=[1,2,3,4,5];var result=array.every(function(value,index,array){return value>2;});console.log(result);//false,因?yàn)?<2var result1=array.some(function(value,index,array){return value>2;});console.log(result1);//truefilter函數(shù)利用指定的函數(shù)確定是否在返回的數(shù)組中包含一項(xiàng),并形成新的數(shù)組。
var array=[1,2,3,4,5]; var array1=array.filter(function(value,index,array){ return value>2; }); console.log(array1.toString());//3,4,5上面的代碼對array進(jìn)行了filter過濾,返回所有大于2的項(xiàng),形成新的數(shù)組。
map方法也返回一個新的數(shù)組,但是這個新的數(shù)組的每一項(xiàng)都是對原來的每一項(xiàng)元素執(zhí)行了指定的函數(shù)。
var array=[1,2,3,4,5]; var array1=array.map(function(value,index,array){return value*2;}); console.log(array1.toString());//2,4,6,8,10上面的代碼對array進(jìn)行了map方法,返回了新的數(shù)組,在原來的數(shù)組每一項(xiàng)乘2.
forEach方法,對數(shù)組的每一項(xiàng)執(zhí)行傳入的函數(shù)。沒有返回值,與for循環(huán)類似。
var array=[1,2,3,4,5]; array.forEach(function(value,index,array){ console.log(value); });?可以自己上述5個重寫。因?yàn)橛械臑g覽器不支持上述5個方法
Array.prototype.every=function(func){var result=false;for(var i=0,len=this.length;i<len;i++){result=func(this[i],i,this);if(result==false){return false;}}return true;}Array.prototype.some=function(func){var result=false;for(var i=0,len=this.length;i<len;i++){result=func(this[i],i,this);if(result==true){return true;}}return false;}Array.prototype.filter=function(func){var result=[];for(var i=0,len=this.length;i<len;i++){var flag=func(this[i],i,this);if(flag){result.push(this[i]);}}return result;}Array.prototype.map=function(func){var result=[];for(var i=0,len=this.length;i<len;i++){var flag=func(this[i],i,this);result.push(flag);}return result;}Array.prototype.forEach=function(func){for(var i=0,len=this.length;i<len;i++){func(this[i],i,this);}} View Code?
轉(zhuǎn)載于:https://www.cnblogs.com/ggz19/p/8176502.html
總結(jié)
以上是生活随笔為你收集整理的JavaScript对象和数组的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: rank() over,dense_ra
- 下一篇: 360急速浏览器JS的调试