麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 編程 > JavaScript > 正文

JavaScript基礎(chǔ)篇(3)之Object、Function等引用類型

2019-11-20 11:07:35
字體:
供稿:網(wǎng)友

閱讀目錄

Object類型

1、通過構(gòu)造函數(shù)來創(chuàng)建
2、通過字面量表示法來創(chuàng)建對(duì)象

Array類型

同樣Array也有兩種創(chuàng)建方式:
如果我們想要打印數(shù)組中所有的值,直接打印數(shù)組的變量名就可以:
往數(shù)組添值:
棧方法、隊(duì)列方法:
 關(guān)于數(shù)組的排序:
 數(shù)組的一些操作方法:
查找位置方法
迭代方法

歸并方法

Date類型

RegExp類型

Function類型

三種表示法:

方法重載
函數(shù)內(nèi)部屬性(arguments 和 this)

基本包裝類型

瀏覽器的內(nèi)置對(duì)象
URI 編碼方法

總結(jié)

我們?cè)凇兑徊讲綄W(xué)習(xí)javascript基礎(chǔ)篇(1):基本概念》中簡(jiǎn)單的介紹了五種基本數(shù)據(jù)類型Undefined、Null、Boolean、Number和String。今天我們主要介紹下復(fù)雜數(shù)據(jù)類型(即引用數(shù)據(jù)類型)

Object類型

我們用的最多的引用類型就屬object類型了,一般用來存儲(chǔ)和傳輸數(shù)據(jù)是再好不過的。然,它的兩種創(chuàng)建方式我們是否了解呢?

1、通過構(gòu)造函數(shù)來創(chuàng)建

如: var obj = new Object();

在js中的引用類型有個(gè)非常靈活的用法,可以動(dòng)態(tài)的附加屬性和賦值。

如:

var obj = new Object();obj.name = "張三";//動(dòng)態(tài)添加屬性并賦值obj.age = 23;alert(obj.name);

2、通過字面量表示法來創(chuàng)建對(duì)象

現(xiàn)在大家用得比較多的就是字面量表示法來創(chuàng)建對(duì)象了。

如:

var obj = { name: "張三", age: 23};alert(obj.age);

和上面的效果是等效的。通過這樣方式創(chuàng)建感覺結(jié)構(gòu)更加的清晰,更加有封裝的感覺。:)

我們還可以這樣用

如:

var obj = {};obj.name = "張三";obj.age = 23;alert(obj.age);

如:

var obj = { "name": "張三",//給屬性加上雙引號(hào) age: 23};alert(obj.name);

是不是感覺很強(qiáng)大很靈活呢?我在訪問屬性的時(shí)候一般都是點(diǎn)出來,但是還有另外的方式。

如:(我們可以使用中括號(hào)的形式來訪問屬性值)

var obj = { "name tow": "張三", age: 23};//alert(obj.name tow);//這里會(huì)報(bào)錯(cuò),屬性不能有空格alert(obj["name tow"]);//這里可以正常彈出

例:

Array類型

除了object之外,應(yīng)該屬數(shù)組用的最多了。下面來羅列下常見用法。

同樣Array也有兩種創(chuàng)建方式:

var arr = new Array(1, 2, 3, 4, 5);//通過構(gòu)造函數(shù)創(chuàng)建var arr2 = [5, 4, 3, 2, 1];//通過字面量表達(dá)式來創(chuàng)建 

上面兩種方式是等效的,我們可以直接通過下標(biāo)的方式來訪問數(shù)組: alert(arr[2]); 。

如果我們想要打印數(shù)組中所有的值,直接打印數(shù)組的變量名就可以:

var arr2 = [5, 4, 3, 2, 1];//通過字面量表達(dá)式來創(chuàng)建var str2 = "";for (var i = 0; i < arr2.length; i++) { str2 += arr2[i] + ","}alert(str2);//打印拼接的字符串  alert(arr2);//直接打印變量名(實(shí)際上會(huì)自動(dòng)調(diào)用數(shù)組的toString方法)

例:

 var arr2 = [5, 4, 3, 2, 1];//通過字面量表達(dá)式來創(chuàng)建var str2 = "";for (var i = 0; i < arr2.length; i++) { str2 += arr2[i] + ","}alert(str2);//打印拼接的字符串

例:

 var arr2 = [5, 4, 3, 2, 1];//通過字面量表達(dá)式來創(chuàng)建alert(arr2);//直接打印變量名(實(shí)際上會(huì)自動(dòng)調(diào)用數(shù)組的toString方法)

上面直接打印arr2,我們發(fā)現(xiàn)默認(rèn)都是以逗號(hào)分隔的。那么有時(shí)候,我們不想用逗號(hào)怎么辦呢。那你可能可以用到j(luò)oin方法

 var arr2 = [5, 4, 3, 2, 1];//通過字面量表達(dá)式來創(chuàng)建alert(arr2.join('_'));//直接打印變量名(實(shí)際上會(huì)自動(dòng)調(diào)用數(shù)組的toString方法)

往數(shù)組添值:

我們可以直接: arr2[4] = 7; arr2[5] = 8; 

還有一種更加巧妙地添值方式: arr2[arr2.length] = 9; arr2[arr2.length] = 10; ,下標(biāo)length剛好是數(shù)組最大長(zhǎng)度的下一個(gè),添加值后length再次動(dòng)態(tài)自動(dòng)累計(jì)。

棧方法、隊(duì)列方法:

什么是棧?(后進(jìn)先出)。什么是隊(duì)列?(先進(jìn)先出),我們?cè)鯓佑脭?shù)組來模仿這種數(shù)據(jù)結(jié)構(gòu)的訪問方式?下面通過一張圖來解釋下數(shù)組對(duì)象提供的四個(gè)方法。

從圖可以看出:shift和push、unshift和pop的組合可以實(shí)現(xiàn)棧的數(shù)據(jù)結(jié)構(gòu)訪問,shitf和pop、shift和unshift的組合可以實(shí)現(xiàn)隊(duì)列的數(shù)據(jù)機(jī)構(gòu)訪問方式。 這里需要注意:pop和shift取數(shù)據(jù)的同時(shí),數(shù)組中對(duì)于的值也同時(shí)移除了。

例:

 var arr2 = [5, 4, 3, 2, 1];alert("arr2.pop:" + arr2.pop() + " arr2:" + arr2);

 關(guān)于數(shù)組的排序:

關(guān)于數(shù)組的排序有sort(正)reverse(反)。

先看個(gè)例子,大家猜想下結(jié)果:

var arr2 = [5, 14, 23, 12, 1];alert(arr2.sort());

 然結(jié)果并不是我們想要的:

 var arr2 = [5, 14, 23, 12, 1];alert(arr2.sort());

 為什么會(huì)這樣呢?因?yàn)閟ort不會(huì)直接比較數(shù)字類型,而已轉(zhuǎn)為string了再做的比較。那么我們想要比較數(shù)字怎辦?我們可以往sort傳函數(shù),例:

 function mycompare(o1, o2){ return o1 - o2;//如果為正數(shù)則o1大,負(fù)數(shù)則o2大,零則相等。}var arr2 = [5, 14, 23, 12, 1];alert(arr2.sort(mycompare));

 有人會(huì)問o1和o2是怎么來的?這是sort函數(shù)規(guī)定的。這樣說大家可能不好接受。下面,我們自己來模擬下sort的排序,大家就明白了。

var arr2 = [5, 14, 23, 12, 1, 123, 23, 4, 5, 6, 32, 5, 3, 2, 1];arr2.mysort = function (fun) { //*********************具體排序過程******************* for (var i = 0; i < arr2.length - 1; i++) {  for (var j = 0; j < arr2.length - i; j++) {   if (fun(arr2[j], arr2[j + 1]) > 0) {//這里用我們傳進(jìn)來的方法判斷是否要排序調(diào)換位置    var temp = arr2[j];    arr2[j] = arr2[j + 1];    arr2[j + 1] = temp;   }  } } //*************************************************** return arr2;} function mycompare(o1, o2) { return o1 - o2;//回調(diào)函數(shù)(具體的比較規(guī)則)}alert(arr2.mysort(mycompare)); var arr2 = [5, 14, 23, 12, 1, 123, 23, 4, 5, 6, 32, 5, 3, 2, 1];arr2.mysort = function (fun) { //*********************具體排序過程******************* for (var i = 0; i < arr2.length - 1; i++) {  for (var j = 0; j < arr2.length - i; j++) {  if (fun(arr2[j], arr2[j + 1]) > 0) {//這里用我們傳進(jìn)來的方法判斷是否要排序調(diào)換位置   var temp = arr2[j];   arr2[j] = arr2[j + 1];   arr2[j + 1] = temp;   }  } } //*************************************************** return arr2;}function mycompare(o1, o2) { return o1 - o2;//回調(diào)函數(shù)(具體的比較規(guī)則)}alert(arr2.mysort(mycompare));

當(dāng)然,我們模擬的并不是那么的好,大概就是這么個(gè)意思。

反序就簡(jiǎn)單了:(直接reverse()就可以了)

function mysort(o1, o2){ return o1 - o2;//如果為正數(shù)則o1大,負(fù)數(shù)則o2大,零則相等。}var arr2 = [5, 14, 23, 12, 1];arr2.sort(mysort);arr2.reverse();alert(arr2);

數(shù)組的一些操作方法:
concat創(chuàng)建一個(gè)新的副本,并合并傳進(jìn)來的參數(shù)

var colors = ["red", "green", "blue"];var colors2 = colors.concat("yellow", ["black", "brown"]);alert(colors); //red,green,bluealert(colors2); //red,green,blue,yellow,black,brow

slice創(chuàng)建一個(gè)新的副本,取數(shù)組的位置數(shù)據(jù)

var colors = ["red", "green", "blue", "yellow", "purple"];var colors2 = colors.slice(1);//從下標(biāo)為1的開始,到末尾var colors3 = colors.slice(1, 4);//從下標(biāo)1(包含1)到4(不包含4)alert(colors2); //green,blue,yellow,purplealert(colors3); //green,blue,yellow

splice會(huì)改變?cè)瓟?shù)組數(shù)據(jù),可實(shí)現(xiàn)對(duì)數(shù)組的刪、插和替換

 var colors = ["red", "green", "blue"]; var removed = colors.splice(0, 1); // 刪除第一項(xiàng)(從下標(biāo)0開始,刪除1項(xiàng)) alert(colors); // green,blue alert(removed); // red,返回的數(shù)組中只包含一項(xiàng) removed = colors.splice(1, 0, "yellow", "orange"); // 從位置 1 開始插入兩項(xiàng)(從下標(biāo)0開始,刪除0項(xiàng),并插入后面的參數(shù)數(shù)據(jù)) alert(colors); // green,yellow,orange,blue alert(removed); // 返回的是一個(gè)空數(shù)組 removed = colors.splice(1, 1, "red", "purple"); // 插入兩項(xiàng),刪除一項(xiàng)(從下標(biāo)1開始,刪除1項(xiàng)[也就是yellow],并插入后面的參數(shù)數(shù)據(jù)) alert(colors); // green,red,purple,orange,blue alert(removed); // yellow,返回的數(shù)組中只包含一項(xiàng)

查找位置方法

indexOf()和 lastIndexOf(),就是查找在數(shù)組中的位置,和string中的對(duì)應(yīng)方法差不多。

迭代方法

 every():對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),如果該函數(shù)對(duì)每一項(xiàng)都返回 true,則返回 true。
 filter():對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),返回該函數(shù)會(huì)返回 true 的項(xiàng)組成的數(shù)組。
 forEach():對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù)。這個(gè)方法沒有返回值。
 map():對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),返回每次函數(shù)調(diào)用的結(jié)果組成的數(shù)組。
 some():對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),如果該函數(shù)對(duì)任一項(xiàng)返回 true,則返回 true。

以上方法都不會(huì)修改數(shù)組中的包含的值。

如:

var numbers = [1,2,3,4,5,4,3,2,1];var everyResult = numbers.every(function(item, index, array){return (item > 2);});alert(everyResult); //false

其中。forEach和map區(qū)別不大,只是一個(gè)有返回值,一個(gè)沒有。實(shí)際中我們用forEach比較多,下面我們模擬forEach的實(shí)現(xiàn)。

var str = "", str2 = "";var numbers = [1, 2, 3, 4, 5, 4, 3, 2, 1];numbers.forEach(function (item, index, array) { str += item + "_";});//**************其實(shí)我們完全可以自己模擬實(shí)現(xiàn)*******numbers.myforEach = function (fun) { for (var i = 0; i < numbers.length; i++) {  fun(numbers[i], i, numbers); }}numbers.myforEach(function (item, index, array) { str2 += item + "*";})//***************************************************alert("str:" + str + " str2:" + str2);var str = "", str2 = "";var numbers = [1, 2, 3, 4, 5, 4, 3, 2, 1];numbers.forEach(function (item, index, array) { str += item + "_";});//**************其實(shí)我們完全可以自己模擬實(shí)現(xiàn)*******numbers.myforEach = function (fun) { for (var i = 0; i < numbers.length; i++) {  fun(numbers[i], i, numbers); }}numbers.myforEach(function (item, index, array) { str2 += item + "*";})//***************************************************alert("str:" + str + " str2:" + str2);

歸并方法

 reduce()和 reduceRight(),這兩個(gè)方法是比較有意思的,以前還真沒接觸過。先看例子,再解釋:

var values = [1,2,3,4,5];var sum = values.reduce(function(prev, cur, index, array){ return prev + cur;});alert(sum); //15

也是個(gè)循環(huán),第一次執(zhí)行 prev 是 1, cur 是 2。第二次, prev 是 3(1 加 2 的結(jié)果), cur 是 3(數(shù)組的第三項(xiàng))。這個(gè)過程會(huì)持續(xù)到把數(shù)組中的每一項(xiàng)都訪問一遍,最后返回結(jié)果。reduceRight只是方向相反。

下面我們來模擬:

var numbers = [1, 2, 3, 4, 5, 3];var sum = numbers.reduce(function (prev, cur, index, array) { return prev + cur;});//***********************模擬實(shí)現(xiàn)reduce**************************numbers.myreduce = function (fun) { for (var i = 0; i < numbers.length; i++) {  var temp = 0;  for (var j = 0; j < i; j++)   temp += numbers[j];  var tempNum = fun(temp, numbers[i], i, numbers); } return tempNum;}//*************************************************var sum2 = numbers.myreduce(function (prev, cur, index, array) { return prev + cur;})alert("sum:" + sum + " sum2:" + sum2); //var numbers = [1, 2, 3, 4, 5, 3];var sum = numbers.reduce(function (prev, cur, index, array) { return prev + cur;});//***********************模擬實(shí)現(xiàn)reduce**************************numbers.myreduce = function (fun) {for (var i = 0; i < numbers.length; i++) { var temp = 0; for (var j = 0; j < i; j++)  temp += numbers[j];   var tempNum = fun(temp, numbers[i], i, numbers);  }  return tempNum;}//*************************************************var sum2 = numbers.myreduce(function (prev, cur, index, array) { return prev + cur;})alert("sum:" + sum + " sum2:" + sum2); //

Date類型

我們很多時(shí)候需要測(cè)試一個(gè)函數(shù)的性能,可以取它的執(zhí)行進(jìn)過時(shí)間:

//取得開始時(shí)間var start = Date.now();//調(diào)用函數(shù)doSomething();//取得停止時(shí)間var stop = Date.now(),result = stop 

主站蜘蛛池模板:
国产成人高清成人av片在线看
|
亚洲一区在线免费视频
|
成人 精品|
综合日韩av
|
av手机免费在线观看
|
欧美成人视
|
色人阁导航|
在线中文字幕亚洲
|
久久国产精品电影
|
啪啪激情|
久久久入口
|
亚洲电影在线播放
|
99在线热视频
|
日本不卡视频在线观看
|
免费一级欧美在线观看视频
|
日韩视频1|
黑人一区二区三区四区五区
|
日韩视频一区二区在线观看
|
黄色va视频
|
九九热这里只有精品8
|
久久久久久久91
|
国产一区二区精品91
|
国产亚洲精品久久久久5区
日韩一级片一区二区三区
国产精品久久久久av
|
成人国产免费观看
|
欧洲成人一区
|
性欧美xxxx免费岛国不卡电影
|
亚洲视屏在线
|
久久国产精品一区
|
av电影手机在线看
|
毛片免费视频播放
|
久久91久久久久麻豆精品
|
www.9191.com|
激情夜色
|
毛片在线免费观看网址
|
黄色免费电影网址
|
91九色电影|
久久人操|
噜噜社|
久久精品视频12
|
国产精品久久久久久久久久iiiii
|
日日狠狠久久偷偷四色综合免费
|