日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

JavaScript新手入门教程大全~~~

發(fā)布時(shí)間:2025/3/12 javascript 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaScript新手入门教程大全~~~ 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

JavaScript新手入門(mén)教程大全~~~

一。?js教程介紹:JavaScript是一種運(yùn)行在瀏覽器中的解釋型的編程語(yǔ)言。

那么問(wèn)題來(lái)了,為什么我們要學(xué)JavaScript?因?yàn)槟銢](méi)有選擇。在Web世界里,只有JavaScript能跨平臺(tái)、跨瀏覽器驅(qū)動(dòng)網(wǎng)頁(yè),與用戶(hù)交互

Flash背后的ActionScript曾經(jīng)流行過(guò)一陣子,不過(guò)隨著移動(dòng)應(yīng)用的興起,沒(méi)有人用Flash開(kāi)發(fā)手機(jī)App,所以它目前已經(jīng)邊緣化了。相反,隨著HTML5在PC和移動(dòng)端越來(lái)越流行,JavaScript變得更加重要了。并且,新興的Node.js把JavaScript引入到了服務(wù)器端,JavaScript已經(jīng)變成了全能型選手。

JavaScript一度被認(rèn)為是一種玩具編程語(yǔ)言,它有很多缺陷,所以不被大多數(shù)后端開(kāi)發(fā)人員所重視。很多人認(rèn)為,寫(xiě)JavaScript代碼很簡(jiǎn)單,并且JavaScript只是為了在網(wǎng)頁(yè)上添加一點(diǎn)交互和動(dòng)畫(huà)效果。

但這是完全錯(cuò)誤的理解。JavaScript確實(shí)很容易上手,但其精髓卻不為大多數(shù)開(kāi)發(fā)人員所熟知。編寫(xiě)高質(zhì)量的JavaScript代碼更是難上加難。

一個(gè)合格的開(kāi)發(fā)人員應(yīng)該精通JavaScript和其他編程語(yǔ)言。如果你已經(jīng)掌握了其他編程語(yǔ)言,或者你還什么都不會(huì),請(qǐng)立刻開(kāi)始學(xué)習(xí)JavaScript,不要被Web時(shí)代所淘汰。


二。 js快速學(xué)習(xí)入門(mén):


JavaScript代碼可以直接嵌在網(wǎng)頁(yè)的任何地方,不過(guò)通常我們都把JavaScript代碼放到<head>中:

<html> <head><script>alert('Hello, world');</script> </head> <body>... </body> </html>

由<script>...</script>包含的代碼就是JavaScript代碼,它將直接被瀏覽器執(zhí)行。

第二種方法是把JavaScript代碼放到一個(gè)單獨(dú)的.js文件,然后在HTML中通過(guò)<script src="..."></script>引入這個(gè)文件:

<html> <head> <script src="/static/js/abc.js"></script> </head> <body>... </body> </html>

這樣,/static/js/abc.js就會(huì)被瀏覽器執(zhí)行。

把JavaScript代碼放入一個(gè)單獨(dú)的.js文件中更利于維護(hù)代碼,并且多個(gè)頁(yè)面可以各自引用同一份.js文件。

可以在同一個(gè)頁(yè)面中引入多個(gè).js文件,還可以在頁(yè)面中多次編寫(xiě)<script> js代碼... </script>,瀏覽器按照順序依次執(zhí)行。



比較運(yùn)算符

當(dāng)我們對(duì)Number做比較時(shí),可以通過(guò)比較運(yùn)算符得到一個(gè)布爾值:

2 > 5; // false 5 >= 2; // true 7 == 7; // true

實(shí)際上,JavaScript允許對(duì)任意數(shù)據(jù)類(lèi)型做比較:

false == 0; // true false === 0; // false

要特別注意相等運(yùn)算符==。JavaScript在設(shè)計(jì)時(shí),有兩種比較運(yùn)算符:

第一種是==比較,它會(huì)自動(dòng)轉(zhuǎn)換數(shù)據(jù)類(lèi)型再比較,很多時(shí)候,會(huì)得到非常詭異的結(jié)果;

第二種是===比較,它不會(huì)自動(dòng)轉(zhuǎn)換數(shù)據(jù)類(lèi)型,如果數(shù)據(jù)類(lèi)型不一致,返回false,如果一致,再比較。

由于JavaScript這個(gè)設(shè)計(jì)缺陷,不要使用==比較,始終堅(jiān)持使用===比較。


數(shù)組

數(shù)組是一組按順序排列的集合,集合的每個(gè)值稱(chēng)為元素。JavaScript的數(shù)組可以包括任意數(shù)據(jù)類(lèi)型。例如:

[1, 2, 3.14, 'Hello', null, true];

上述數(shù)組包含6個(gè)元素。數(shù)組用[]表示,元素之間用,分隔。

另一種創(chuàng)建數(shù)組的方法是通過(guò)Array()函數(shù)實(shí)現(xiàn):

new Array(1, 2, 3); // 創(chuàng)建了數(shù)組[1, 2, 3]

然而,出于代碼的可讀性考慮,強(qiáng)烈建議直接使用[]。

數(shù)組的元素可以通過(guò)索引來(lái)訪問(wèn)。請(qǐng)注意,索引的起始值為0:

var arr = [1, 2, 3.14, 'Hello', null, true]; arr[0]; // 返回索引為0的元素,即1 arr[5]; // 返回索引為5的元素,即true arr[6]; // 索引超出了范圍,返回undefined


對(duì)象

JavaScript的對(duì)象是一組由鍵-值組成的無(wú)序集合,例如:

var person = {name: 'Bob',age: 20,tags: ['js', 'web', 'mobile'],city: 'Beijing',hasCar: true,zipcode: null };

JavaScript對(duì)象的鍵都是字符串類(lèi)型,值可以是任意數(shù)據(jù)類(lèi)型。上述person對(duì)象一共定義了6個(gè)鍵值對(duì),其中每個(gè)鍵又稱(chēng)為對(duì)象的屬性,例如,person的name屬性為'Bob',zipcode屬性為null。

要獲取一個(gè)對(duì)象的屬性,我們用對(duì)象變量.屬性名的方式:

person.name; // 'Bob' person.zipcode; // null


變量

變量的概念基本上和初中代數(shù)的方程變量是一致的,只是在計(jì)算機(jī)程序中,變量不僅可以是數(shù)字,還可以是任意數(shù)據(jù)類(lèi)型。

變量在JavaScript中就是用一個(gè)變量名表示,變量名是大小寫(xiě)英文、數(shù)字、$和_的組合,且不能用數(shù)字開(kāi)頭。變量名也不能是JavaScript的關(guān)鍵字,如if、while等。申明一個(gè)變量用var語(yǔ)句,比如:

var a; // 申明了變量a,此時(shí)a的值為undefined var $b = 1; // 申明了變量$b,同時(shí)給$b賦值,此時(shí)$b的值為1 var s_007 = '007'; // s_007是一個(gè)字符串 var Answer = true; // Answer是一個(gè)布爾值true var t = null; // t的值是null

變量名也可以用中文,但是,請(qǐng)不要給自己找麻煩。

在JavaScript中,使用等號(hào)=對(duì)變量進(jìn)行賦值。可以把任意數(shù)據(jù)類(lèi)型賦值給變量,同一個(gè)變量可以反復(fù)賦值,而且可以是不同類(lèi)型的變量,但是要注意只能用var申明一次,例如

var a = 123; // a的值是整數(shù)123 a = 'ABC'; // a變?yōu)樽址?/span>

這種變量本身類(lèi)型不固定的語(yǔ)言稱(chēng)之為動(dòng)態(tài)語(yǔ)言,與之對(duì)應(yīng)的是靜態(tài)語(yǔ)言。靜態(tài)語(yǔ)言在定義變量時(shí)必須指定變量類(lèi)型,如果賦值的時(shí)候類(lèi)型不匹配,就會(huì)報(bào)錯(cuò)。例如Java是靜態(tài)語(yǔ)言,賦值語(yǔ)句如下:

int a = 123; // a是整數(shù)類(lèi)型變量,類(lèi)型用int申明 a = "ABC"; // 錯(cuò)誤:不能把字符串賦給整型變量

和靜態(tài)語(yǔ)言相比,動(dòng)態(tài)語(yǔ)言更靈活,就是這個(gè)原因。


strict模式

如果一個(gè)變量沒(méi)有通過(guò)var申明就被使用,那么該變量就自動(dòng)被申明為全局變量

i = 10; // i現(xiàn)在是全局變量


使用var申明的變量則不是全局變量,它的范圍被限制在該變量被申明的函數(shù)體內(nèi)(函數(shù)的概念將稍后講解),同名變量在不同的函數(shù)體內(nèi)互不沖突。

為了修補(bǔ)JavaScript這一嚴(yán)重設(shè)計(jì)缺陷,ECMA在后續(xù)規(guī)范中推出了strict模式,在strict模式下運(yùn)行的JavaScript代碼,強(qiáng)制通過(guò)var申明變量,未使用var申明變量就使用的,將導(dǎo)致運(yùn)行錯(cuò)誤。

啟用strict模式的方法是在JavaScript代碼的第一行寫(xiě)上:

'use strict';

這是一個(gè)字符串,不支持strict模式的瀏覽器會(huì)把它當(dāng)做一個(gè)字符串語(yǔ)句執(zhí)行,支持strict模式的瀏覽器將開(kāi)啟strict模式運(yùn)行JavaScript。

來(lái)測(cè)試一下你的瀏覽器是否能支持strict模式:

'use strict';

// 如果瀏覽器支持strict模式,

// 下面的代碼將報(bào)ReferenceError錯(cuò)誤:

abc = 'Hello, world';
console.log(abc);


字符串


JavaScript的字符串就是用''或""括起來(lái)的字符表示。

如果'本身也是一個(gè)字符,那就可以用""括起來(lái),比如"I'm OK"包含的字符是I,',m,空格,O,K這6個(gè)字符。

如果字符串內(nèi)部既包含'又包含"怎么辦?可以用轉(zhuǎn)義字符\來(lái)標(biāo)識(shí),比如:

'I\'m \"OK\"!';

表示的字符串內(nèi)容是:I'm "OK"!

轉(zhuǎn)義字符\可以轉(zhuǎn)義很多字符,比如\n表示換行,\t表示制表符,字符\本身也要轉(zhuǎn)義,所以\\表示的字符就是\。

ASCII字符可以以\x##形式的十六進(jìn)制表示,例如:

'\x41'; // 完全等同于 'A'

還可以用\u####表示一個(gè)Unicode字符:

'\u4e2d\u6587'; // 完全等同于 '中文'

模板字符串

要把多個(gè)字符串連接起來(lái),可以用+號(hào)連接:

var name = '小明'; var age = 20; var message = '你好, ' + name + ', 你今年' + age + '歲了!'; alert(message);

如果有很多變量需要連接,用+號(hào)就比較麻煩。ES6新增了一種模板字符串,表示方法和上面的多行字符串一樣,但是它會(huì)自動(dòng)替換字符串中的變量:

var name = '小明'; var age = 20; var message = `你好, ${name}, 你今年${age}歲了!`;//主要,這里的`是在esc按鍵下面的那個(gè)按鈕 alert(message);

操作字符串

字符串常見(jiàn)的操作如下:

var s = 'Hello, world!'; s.length; // 13

要獲取字符串某個(gè)指定位置的字符,使用類(lèi)似Array的下標(biāo)操作,索引號(hào)從0開(kāi)始:

var s = 'Hello, world!';s[0]; // 'H' s[6]; // ' ' s[7]; // 'w' s[12]; // '!' s[13]; // undefined 超出范圍的索引不會(huì)報(bào)錯(cuò),但一律返回undefined

需要特別注意的是,字符串是不可變的,如果對(duì)字符串的某個(gè)索引賦值,不會(huì)有任何錯(cuò)誤,但是,也沒(méi)有任何效果:

var s = 'Test'; s[0] = 'X'; alert(s); // s仍然為'Test'

JavaScript為字符串提供了一些常用方法,注意,調(diào)用這些方法本身不會(huì)改變?cè)凶址膬?nèi)容,而是返回一個(gè)新字符串:

toUpperCase

toUpperCase()把一個(gè)字符串全部變?yōu)榇髮?xiě):

var s = 'Hello'; s.toUpperCase(); // 返回'HELLO'

toLowerCase

toLowerCase()把一個(gè)字符串全部變?yōu)樾?xiě):

var s = 'Hello'; var lower = s.toLowerCase(); // 返回'hello'并賦值給變量lower lower; // 'hello'

indexOf

indexOf()會(huì)搜索指定字符串出現(xiàn)的位置:

var s = 'hello, world'; s.indexOf('world'); // 返回7 s.indexOf('World'); // 沒(méi)有找到指定的子串,返回-1

substring

substring()返回指定索引區(qū)間的子串:

var s = 'hello, world' s.substring(0, 5); // 從索引0開(kāi)始到5(不包括5),返回'hello' s.substring(7); // 從索引7開(kāi)始到結(jié)束,返回'world'


數(shù)組:


JavaScript的Array可以包含任意數(shù)據(jù)類(lèi)型,并通過(guò)索引來(lái)訪問(wèn)每個(gè)元素。

要取得Array的長(zhǎng)度,直接訪問(wèn)length屬性:

var arr = [1, 2, 3.14, 'Hello', null, true]; arr.length; // 6

請(qǐng)注意,直接給Array的length賦一個(gè)新的值會(huì)導(dǎo)致Array大小的變化:

var arr = [1, 2, 3]; arr.length; // 3 arr.length = 6; arr; // arr變?yōu)閇1, 2, 3, undefined, undefined, undefined] arr.length = 2; arr; // arr變?yōu)閇1, 2]

Array可以通過(guò)索引把對(duì)應(yīng)的元素修改為新的值,因此,對(duì)Array的索引進(jìn)行賦值會(huì)直接修改這個(gè)Array:

var arr = ['A', 'B', 'C']; arr[1] = 99; arr; // arr現(xiàn)在變?yōu)閇'A', 99, 'C']

請(qǐng)注意,如果通過(guò)索引賦值時(shí),索引超過(guò)了范圍,同樣會(huì)引起Array大小的變化:

var arr = [1, 2, 3]; arr[5] = 'x'; arr; // arr變?yōu)閇1, 2, 3, undefined, undefined, 'x']

大多數(shù)其他編程語(yǔ)言不允許直接改變數(shù)組的大小,越界訪問(wèn)索引會(huì)報(bào)錯(cuò)。然而,JavaScript的Array卻不會(huì)有任何錯(cuò)誤。在編寫(xiě)代碼時(shí),不建議直接修改Array的大小,訪問(wèn)索引時(shí)要確保索引不會(huì)越界。

indexOf

與String類(lèi)似,Array也可以通過(guò)indexOf()來(lái)搜索一個(gè)指定的元素的位置:

var arr = [10, 20, '30', 'xyz']; arr.indexOf(10); // 元素10的索引為0 arr.indexOf(20); // 元素20的索引為1 arr.indexOf(30); // 元素30沒(méi)有找到,返回-1 arr.indexOf('30'); // 元素'30'的索引為2

注意了,數(shù)字30和字符串'30'是不同的元素。

slice

slice()就是對(duì)應(yīng)String的substring()版本,它截取Array的部分元素,然后返回一個(gè)新的Array:

var arr = ['A', 'B', 'C', 'D', 'E', 'F', 'G']; arr.slice(0, 3); // 從索引0開(kāi)始,到索引3結(jié)束,但不包括索引3: ['A', 'B', 'C'] arr.slice(3); // 從索引3開(kāi)始到結(jié)束: ['D', 'E', 'F', 'G']

注意到slice()的起止參數(shù)包括開(kāi)始索引,不包括結(jié)束索引。

如果不給slice()傳遞任何參數(shù),它就會(huì)從頭到尾截取所有元素。利用這一點(diǎn),我們可以很容易地復(fù)制一個(gè)Array:

var arr = ['A', 'B', 'C', 'D', 'E', 'F', 'G']; var aCopy = arr.slice(); aCopy; // ['A', 'B', 'C', 'D', 'E', 'F', 'G'] aCopy === arr; // false

push和pop(就像堆棧一樣)

push()向Array的末尾添加若干元素,pop()則把Array的最后一個(gè)元素刪除掉:

var arr = [1, 2]; arr.push('A', 'B'); // 返回Array新的長(zhǎng)度: 4 arr; // [1, 2, 'A', 'B'] arr.pop(); // pop()返回'B' arr; // [1, 2, 'A'] arr.pop(); arr.pop(); arr.pop(); // 連續(xù)pop 3次 arr; // [] arr.pop(); // 空數(shù)組繼續(xù)pop不會(huì)報(bào)錯(cuò),而是返回undefined arr; // []



unshift和shift

如果要往Array頭部添加若干元素,使用unshift()方法,shift()方法則把Array的第一個(gè)元素刪掉

var arr = [1, 2]; arr.unshift('A', 'B'); // 返回Array新的長(zhǎng)度: 4 arr; // ['A', 'B', 1, 2] arr.shift(); // 'A' arr; // ['B', 1, 2] arr.shift(); arr.shift(); arr.shift(); // 連續(xù)shift 3次 arr; // [] arr.shift(); // 空數(shù)組繼續(xù)shift不會(huì)報(bào)錯(cuò),而是返回undefined arr; // []

sort

sort()可以對(duì)當(dāng)前Array進(jìn)行排序,它會(huì)直接修改當(dāng)前Array的元素位置,直接調(diào)用時(shí),按照默認(rèn)順序排序:

var arr = ['B', 'C', 'A']; arr.sort(); arr; // ['A', 'B', 'C']

能否按照我們自己指定的順序排序呢?完全可以,我們將在后面的函數(shù)中講到。

reverse

reverse()把整個(gè)Array的元素給掉過(guò)來(lái),也就是反轉(zhuǎn):

var arr = ['one', 'two', 'three']; arr.reverse(); arr; // ['three', 'two', 'one']

splice

splice()方法是修改Array的“萬(wàn)能方法”,它可以從指定的索引開(kāi)始刪除若干元素,然后再?gòu)脑撐恢锰砑尤舾稍?#xff1a;

var arr = ['Microsoft', 'Apple', 'Yahoo', 'AOL', 'Excite', 'Oracle']; // 從索引2開(kāi)始刪除3個(gè)元素,然后再添加兩個(gè)元素: arr.splice(2, 3, 'Google', 'Facebook'); // 返回刪除的元素 ['Yahoo', 'AOL', 'Excite'] arr; // ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle'] // 只刪除,不添加: arr.splice(2, 2); // ['Google', 'Facebook'] arr; // ['Microsoft', 'Apple', 'Oracle'] // 只添加,不刪除: arr.splice(2, 0, 'Google', 'Facebook'); // 返回[],因?yàn)闆](méi)有刪除任何元素 arr; // ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']

concat

concat()方法把當(dāng)前的Array和另一個(gè)Array連接起來(lái),并返回一個(gè)新的Array:

var arr = ['A', 'B', 'C']; var added = arr.concat([1, 2, 3]); added; // ['A', 'B', 'C', 1, 2, 3] arr; // ['A', 'B', 'C']

請(qǐng)注意concat()方法并沒(méi)有修改當(dāng)前Array,而是返回了一個(gè)新的Array。

實(shí)際上,concat()方法可以接收任意個(gè)元素和Array,并且自動(dòng)把Array拆開(kāi),然后全部添加到新的Array里:

var arr = ['A', 'B', 'C']; arr.concat(1, 2, [3, 4]); // ['A', 'B', 'C', 1, 2, 3, 4]

join

join()方法是一個(gè)非常實(shí)用的方法,它把當(dāng)前Array的每個(gè)元素都用指定的字符串連接起來(lái),然后返回連接后的字符串:

var arr = ['A', 'B', 'C', 1, 2, 3]; arr.join('-'); // 'A-B-C-1-2-3'

如果Array的元素不是字符串,將自動(dòng)轉(zhuǎn)換為字符串后再連接。

多維數(shù)組

如果數(shù)組的某個(gè)元素又是一個(gè)Array,則可以形成多維數(shù)組,例如:

var arr = [[1, 2, 3], [400, 500, 600], '-'];

上述Array包含3個(gè)元素,其中頭兩個(gè)元素本身也是Array。


對(duì)象


JavaScript的對(duì)象是一種無(wú)序的集合數(shù)據(jù)類(lèi)型,它由若干鍵值對(duì)組成

JavaScript的對(duì)象用于描述現(xiàn)實(shí)世界中的某個(gè)對(duì)象。例如,為了描述“小明”這個(gè)淘氣的小朋友,我們可以用若干鍵值對(duì)來(lái)描述他:

var xiaoming = {name: '小明',birth: 1990,school: 'No.1 Middle School',height: 1.70,weight: 65,score: null };

JavaScript用一個(gè){...}表示一個(gè)對(duì)象,鍵值對(duì)以xxx: xxx形式申明,用,隔開(kāi)。注意,最后一個(gè)鍵值對(duì)不需要在末尾加,,如果加了,有的瀏覽器(如低版本的IE)將報(bào)錯(cuò)。

上述對(duì)象申明了一個(gè)name屬性,值是'小明',birth屬性,值是1990,以及其他一些屬性。最后,把這個(gè)對(duì)象賦值給變量xiaoming后,就可以通過(guò)變量xiaoming來(lái)獲取小明的屬性了:

xiaoming.name; // '小明' xiaoming.birth; // 1990

訪問(wèn)屬性是通過(guò).操作符完成的,但這要求屬性名必須是一個(gè)有效的變量名。如果屬性名包含特殊字符,就必須用''括起來(lái):

var xiaohong = {name: '小紅','middle-school': 'No.1 Middle School' };

xiaohong的屬性名middle-school不是一個(gè)有效的變量,就需要用''括起來(lái)。訪問(wèn)這個(gè)屬性也無(wú)法使用.操作符,必須用['xxx']來(lái)訪問(wèn):

xiaohong['middle-school']; // 'No.1 Middle School' xiaohong['name']; // '小紅' xiaohong.name; // '小紅'

也可以用xiaohong['name']來(lái)訪問(wèn)xiaohong的name屬性,不過(guò)xiaohong.name的寫(xiě)法更簡(jiǎn)潔。我們?cè)诰帉?xiě)JavaScript代碼的時(shí)候,屬性名盡量使用標(biāo)準(zhǔn)的變量名,這樣就可以直接通過(guò)object.prop的形式訪問(wèn)一個(gè)屬性了。

實(shí)際上JavaScript對(duì)象的所有屬性都是字符串,不過(guò)屬性對(duì)應(yīng)的值可以是任意數(shù)據(jù)類(lèi)型。

如果訪問(wèn)一個(gè)不存在的屬性會(huì)返回什么呢?JavaScript規(guī)定,訪問(wèn)不存在的屬性不報(bào)錯(cuò),而是返回undefined:

'use strict';var xiaoming = {name: '小明' };

Map

Map是一組鍵值對(duì)的結(jié)構(gòu),具有極快的查找速度。

舉個(gè)例子,假設(shè)要根據(jù)同學(xué)的名字查找對(duì)應(yīng)的成績(jī),如果用Array實(shí)現(xiàn),需要兩個(gè)Array:

var names = ['Michael', 'Bob', 'Tracy']; var scores = [95, 75, 85];

給定一個(gè)名字,要查找對(duì)應(yīng)的成績(jī),就先要在names中找到對(duì)應(yīng)的位置,再?gòu)膕cores取出對(duì)應(yīng)的成績(jī),Array越長(zhǎng),耗時(shí)越長(zhǎng)。

如果用Map實(shí)現(xiàn),只需要一個(gè)“名字”-“成績(jī)”的對(duì)照表,直接根據(jù)名字查找成績(jī),無(wú)論這個(gè)表有多大,查找速度都不會(huì)變慢。用JavaScript寫(xiě)一個(gè)Map如下:

var m = new Map([['Michael', 95], ['Bob', 75], ['Tracy', 85]]); m.get('Michael'); // 95

初始化Map需要一個(gè)二維數(shù)組,或者直接初始化一個(gè)空Map。Map具有以下方法:

var m = new Map(); // 空Map m.set('Adam', 67); // 添加新的key-value m.set('Bob', 59); m.has('Adam'); // 是否存在key 'Adam': true m.get('Adam'); // 67 m.delete('Adam'); // 刪除key 'Adam' m.get('Adam'); // undefined

由于一個(gè)key只能對(duì)應(yīng)一個(gè)value,所以,多次對(duì)一個(gè)key放入value,后面的值會(huì)把前面的值沖掉:

var m = new Map(); m.set('Adam', 67); m.set('Adam', 88); m.get('Adam'); // 88

Set

Set和Map類(lèi)似,也是一組key的集合,但不存儲(chǔ)value。由于key不能重復(fù),所以,在Set中,沒(méi)有重復(fù)的key。

要?jiǎng)?chuàng)建一個(gè)Set,需要提供一個(gè)Array作為輸入,或者直接創(chuàng)建一個(gè)空Set:

var s1 = new Set(); // 空Set var s2 = new Set([1, 2, 3]); // 含1, 2, 3

重復(fù)元素在Set中自動(dòng)被過(guò)濾:

var s = new Set([1, 2, 3, 3, '3']); s; // Set {1, 2, 3, "3"}

注意數(shù)字3和字符串'3'是不同的元素。

通過(guò)add(key)方法可以添加元素到Set中,可以重復(fù)添加,但不會(huì)有效果

s.add(4); s; // Set {1, 2, 3, 4} s.add(4); s; // 仍然是 Set {1, 2, 3, 4}

通過(guò)delete(key)方法可以刪除元素:

var s = new Set([1, 2, 3]); s; // Set {1, 2, 3} s.delete(3); s; // Set {1, 2}



iterable


遍歷Array可以采用下標(biāo)循環(huán),遍歷Map和Set就無(wú)法使用下標(biāo)。為了統(tǒng)一集合類(lèi)型,ES6標(biāo)準(zhǔn)引入了新的iterable類(lèi)型,Array、Map和Set都屬于iterable類(lèi)型。

具有iterable類(lèi)型的集合可以通過(guò)新的for ... of循環(huán)來(lái)遍歷。

for ... of循環(huán)是ES6引入的新的語(yǔ)法,請(qǐng)測(cè)試你的瀏覽器是否支持:

'use strict'; var a = [1, 2, 3]; for (var x of a) { } console.log('你的瀏覽器支持for ... of');

用for ... of循環(huán)遍歷集合,用法如下:

var a = ['A', 'B', 'C']; var s = new Set(['A', 'B', 'C']); var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]); for (var x of a) { // 遍歷Arrayconsole.log(x); } for (var x of s) { // 遍歷Setconsole.log(x); } for (var x of m) { // 遍歷Mapconsole.log(x[0] + '=' + x[1]); }

你可能會(huì)有疑問(wèn),for ... of循環(huán)和for ... in循環(huán)有何區(qū)別?

for ... in循環(huán)由于歷史遺留問(wèn)題,它遍歷的實(shí)際上是對(duì)象的屬性名稱(chēng)。一個(gè)Array數(shù)組實(shí)際上也是一個(gè)對(duì)象,它的每個(gè)元素的索引被視為一個(gè)屬性。

當(dāng)我們手動(dòng)給Array對(duì)象添加了額外的屬性后,for ... in循環(huán)將帶來(lái)意想不到的意外效果:

var a = ['A', 'B', 'C']; a.name = 'Hello'; for (var x in a) {console.log(x); // '0', '1', '2', 'name' }

for ... in循環(huán)將把name包括在內(nèi),但Array的length屬性卻不包括在內(nèi)。

for ... of循環(huán)則完全修復(fù)了這些問(wèn)題,它只循環(huán)集合本身的元素:

var a = ['A', 'B', 'C']; a.name = 'Hello'; for (var x of a) {console.log(x); // 'A', 'B', 'C' }

這就是為什么要引入新的for ... of循環(huán)。

然而,更好的方式是直接使用iterable內(nèi)置的forEach方法,它接收一個(gè)函數(shù),每次迭代就自動(dòng)回調(diào)該函數(shù)。以Array為例:

'use strict'; var a = ['A', 'B', 'C']; a.forEach(function (element, index, array) {
? ? // element: 指向當(dāng)前元素的值
? ? // index: 指向當(dāng)前索引
? ? // array: 指向Array對(duì)象本身
? ? console.log(element + ', index = ' + index);
});
A,?index?=?0
B,?index?=?1
C,?index?=?2

注意,forEach()方法是ES5.1標(biāo)準(zhǔn)引入的,你需要測(cè)試瀏覽器是否支持。

Set與Array類(lèi)似,但Set沒(méi)有索引,因此回調(diào)函數(shù)的前兩個(gè)參數(shù)都是元素本身:

var s = new Set(['A', 'B', 'C']); s.forEach(function (element, sameElement, set) {console.log(element); });

Map的回調(diào)函數(shù)參數(shù)依次為value、key和map本身:

var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]); m.forEach(function (value, key, map) {console.log(value); });

如果對(duì)某些參數(shù)不感興趣,由于JavaScript的函數(shù)調(diào)用不要求參數(shù)必須一致,因此可以忽略它們。例如,只需要獲得Array的element:

var a = ['A', 'B', 'C']; a.forEach(function (element) {console.log(element); });



參考博文:https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000

總結(jié)

以上是生活随笔為你收集整理的JavaScript新手入门教程大全~~~的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。