亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

JavaScript ES6常用基礎知識總結

2024-05-06 16:48:00
字體:
來源:轉載
供稿:網友

ES6 let與const及其相關

塊級作用域

ES6新增了塊級作用域,總結一句話大致就是:大括號{}包起來的代碼塊基本山都可以當做塊級作用域。

常見的有

直接使用{}包起來:

 { var a = 4 }

函數體大括號,if-else大括號,for循環大括號,switch大括號,try-catch大括號等。 需要注意的是,for循環,每一次循環時的{}都是一個獨立的塊級作用域。

 for(let i=0; a < 5; i++){  let j = i }

上面代碼循環了五次,實際上有五個獨立的j。

日常開發中,我們就可以利用這個特性,來創建塊級作用域了。

塊級作用域變量let與const

使用let或const聲明的變量只在當前塊級作用域生效,出了這個代碼塊,就無法訪問。

 {  let a = 5 }console.log(a) // Uncaught ReferenceError: a is not defined

日常開發中,塊級作用域中使用的變量,盡量使用let或者const聲明。

需要注意的問題:

let和const變量一定要先聲明,再使用,避免出錯。不要試圖利用變量提升的特性。
const聲明變量時,一定要初始化,否則會報錯。let建議也在聲明時初始化。
const聲明的變量一旦初始化,以后就不可以在進行賦值操作,但可以對其引用的對象進行更改。

 const noChangeMe;  // Uncaught SyntaxError: Missing initializer in const declaration const noChangeMe = [1,2,4] noChangeMe = [2, 3]  // Uncaught TypeError: Assignment to constant variable noChangeMe[100] = 100 // everything is OK

let和const聲明的變量不能再重復聲明。 雖然var可以無限次重復聲明,但是并不適用于這兩個新的聲明方式。

 let a = 1 let a = 2  // Identifier 'a' has already been declared

不要用window.xxx去調用let與const聲明的變量 ES6規定,let、const、class聲明的全局變量,不屬于頂層對象的屬性。

String

使用反引號”`”
使用``將字符串包起來,可以解決下面的問題:

字符串不能換行,如果換行只能使用+號
字符串中的引號如果和最外層相同,需要進行轉義
字符串中插入變量,需要用+號 以前這樣的寫法:

 var name = 'world' var str = "小明說:/"hello, " + name + "/""  // 小明說:"hello, world"

現在可以方便的寫作:

 var name = 'world' str str = `小明說:"hello, ${name}"`

總的來說,有三個好處:

不怕字符串中出現的引號;
不怕換行,反引號包起來的字符串可以隨便換行;
使用${}將變量或表達式包起來直接放在字符串中,不用寫很多+

ES6 遍歷字符串

使用for...of代替for循環:

 var string = 'string' for(var i of string) { console.log(i) }

includes(),startsWidth(),endsWidth()
不用使用indexOf()判斷字符串中是否包含某個值了,使用includes():

 var string = 'string' string.includes('i', 0)  // true

includes第二個參數表示查找的起始索引。 還可以使用startsWidth()和endsWidth()判斷字符串是否以某些字符開始或結尾。

ES6 函數

參數的默認值

方便地設置函數參數的默認值

 function print( a = 2 ){ console.log(a) } print() //2

ES6 擴展運算符…獲取其余參數

可以使用...加上變量名保存其他參數全部數量。 當只知道函數的前幾個具體參數,不確定之后會有多少個參數傳入時,可以使用...把其他傳入的參數保存到一個數組中。

 function print(value1, value2, ...values){ console.log(values.join('--')) } print(1, 2, '參數3') // 參數3 print(1, 2, '參數3', '參數4', '參數5') // print(1, 2, '參數3', '參數4', '參數5')

ES6 使用箭頭函數

使用箭頭函數有兩個好處:

代碼更加簡潔
靜態綁定this 箭頭函數中,this指向的是定義箭頭函數的對象中的this。

 var name = 'outer' var obj = {  name: 'inner',  func: () => {  console.log(this.name)  } } var obj2 = {   name: 'inner',   func: function() {     console.log(this.name)   } } obj.func() // "outer" obj2.func() // "inner"

第一個使用了箭頭函數,由于箭頭函數的this與其所在環境中的this相同,也就是與obj的this相同,而obj處于全局環境的活動對象中,this指向全局對象,這里指window,所以輸出outer。 注意:obj對象的this與它的屬性中的this不一樣。 第二個使用了尋常函數,作為obj2的一個屬性,func方法中的this指向了所在的對象。輸出inner。

ES6 數組

使用Array.from()把類數組對象轉為數組

一般來說,含有length屬性的對象就可以當作類數組對象。平時獲取多個DOM對象后,不能使用數組中的很多方法。我們可以使用Array.from方便的轉換為數組,。

 var divs = Array.from(document.querySelectorAll('div')) divs.forEach((value, index) => {})

使用fill()初始化數組

想要以某個值初始化數組,需要遍歷。而使用fill()方法,就方便了很多。

 var arr = new Array(100) // 建立一個100元素的數組 arr.fill('初始值', 0, arr.length)

第一個參數是要填充的值,后面兩個與一般的數組方法一樣,起始索引和結束索引(不包括)。

使用includes方法

和字符串的includes方法一樣,看數組中是否有給定值。

對象
使用簡單的屬性表示和方法表示

 var name = 'John' var a = { name: name, sayName: function(){ console.log(this.name) } }

改寫為:

 var name = 'John' var a = { name, sayName () { console.log(this.name) } }

記得Object.is()這個方法
其與===的差別:

 

 NaN === NaN // false Object.is(NaN, NaN) // true -0 === +0  //true Object.is(+0, -0) // false Object.is(+0, 0) / true Object.is(-0, 0) / false

可以這樣理解,遵循的原則: 是同一個東西就要相等。 NaN與NaN就是一個東西,而-0帶了個負號,和0與+0不一樣。0和+0相同就像1和+1相同一樣。

使用Object.assign()合并多個對象

Object.assign()是用來合并對象的。assign,譯作分配,指派。這個方法本意是將某些對象自己的屬性拷貝到目標對象上。它不回去復制繼承來的屬性。 比如可以在定義某個配置的時候,定義一個基礎配置,在定義兩個不同情況下的配置。使用時,進行合并。

 var pathConfig = { path: 'style/images' } var devConfig = { baseUrl: 'http://localhost:8080/' } var buildConfig = { baseUrl: 'https://192.128.0.2' } // 使用時,合并 var mode = 'dev' var config = Object.assign({}, pathConfig, mode === 'dev' ? devConfig : buildConfig)

只是舉個例子。

Object.keys(),Object.values(),Object.entries
這三個方法返回對象自身的,可枚舉的,屬性名為字符串的屬性相關的東西,分別為:

Object.keys(): 屬性名組成的數組Object.values(): 屬性值組成的數組Object.entries: ["key", "value"]組成的數組。 var john = { name: 'John', age: 12 } Object.keys(john) // ["name", "age"] Object.values(john) // ["John", 12] Object.entries(john) // [["name", "John"], ["age", 12]]

ES6 ...運算符

前面在函數的剩余參數處理中提到了...擴展運算符??偨Y了一下,感覺有兩個用法:

用來讀取數組或者對象的時候,是把數組或對象給擴展開;
用來給對象或者數組賦值的時候,自動給對象或數組添加屬性或元素。
用來讀取
讀取的時候就是把數組或者對象給擴展開來。

 var a = [...[1,2,3], 4] // 把數組的每一項都展出來 a // [1, 2, 3, 4] var obj = { name: 'John', age: 12 } var newObj = {...obj, job: 'teacher' } // 把某個屬性展出來 newObj // {name: "John", age: 12, job: "teacher"}

所以可以很方便的用來擴展,合并數組或對象。

用作賦值

用作賦值的時候,是用作解構賦值,含義就是把等號右邊表達式的剩余屬性或數組項都放到...后面的變量里。

var a, restB [a, ...restB] = [1, 3, 5] a // 1 restB // [3, 5] var c, restD { name, ...restD } = {name: 'John', age: 12, job: 'teacher'} name // "John" 是一個屬性的值 restD // { c, ...restD } = {name: 'John', age: 12, job: 'teacher'} 是一個對象

對于對象的解構賦值,會把對應不到的屬性全部放進...后面的變量對象中。

注意:因為是把剩下沒人要的屬性或者數組項都收下,所以...應該放在數組或者對象中的最后,且只能有一個。

以上即是ES6常用基礎知識總結,希望對大家有所幫助


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产一区二区三区在线看| 亚洲欧洲国产一区| 亚洲精品国产精品乱码不99按摩| 日韩视频免费在线| 国产97在线|日韩| 日韩欧美国产中文字幕| 欧美在线视频一二三| 精品呦交小u女在线| 亚洲天堂精品在线| 2025国产精品视频| 亚洲乱码av中文一区二区| 日韩在线高清视频| 日韩av网址在线观看| 欧美激情精品久久久久久蜜臀| 美女视频黄免费的亚洲男人天堂| 日韩电影在线观看中文字幕| 久久久国产一区二区| 国内精品久久久久久中文字幕| 久久久久久国产精品美女| 午夜精品蜜臀一区二区三区免费| 亚洲激情视频在线观看| 亚洲人成在线播放| 日韩最新在线视频| 亚洲欧美日韩一区在线| 欧美日韩国产在线播放| 亚洲成人av资源网| 日韩中文有码在线视频| 色先锋久久影院av| 一二美女精品欧洲| 日本欧美国产在线| 国产精品久久一区| 亚洲黄一区二区| 久久精品人人爽| 自拍视频国产精品| 茄子视频成人在线| 91香蕉嫩草神马影院在线观看| 国产精品一二三在线| 国产精品久久久久久av下载红粉| 精品国产一区二区在线| 26uuu另类亚洲欧美日本老年| 成人欧美一区二区三区在线湿哒哒| 国产精品亚洲片夜色在线| 国产成人在线一区| 精品国产31久久久久久| 26uuu国产精品视频| 欧美孕妇毛茸茸xxxx| 久久久欧美一区二区| 在线视频欧美性高潮| 日韩高清av一区二区三区| 欧美中文在线免费| 亚洲性xxxx| xxx成人少妇69| 欧美日韩久久久久| 久久av红桃一区二区小说| 成人免费午夜电影| 日韩中文av在线| 亚洲免费小视频| 亚洲人成网站在线播| 亚洲精品国产综合区久久久久久久| 亚洲精品99久久久久中文字幕| 久久99久久亚洲国产| 日韩在线一区二区三区免费视频| 国产精品久久激情| 日韩电影在线观看免费| 5566成人精品视频免费| 97精品久久久| 欧美日韩国产成人高清视频| 国产精品久久久久久久久| 91精品国产色综合久久不卡98口| 亚洲女成人图区| 成人在线激情视频| 国产精品久久久久久久av电影| 精品一区二区三区三区| 欧美国产精品人人做人人爱| 日本午夜人人精品| 日韩亚洲综合在线| 日本不卡视频在线播放| xxxx欧美18另类的高清| 成人久久18免费网站图片| 欧美超级免费视 在线| 81精品国产乱码久久久久久| 精品成人久久av| 欧美日韩中文字幕在线视频| 亚洲欧洲一区二区三区在线观看| 一区三区二区视频| 日韩在线免费av| 97人人做人人爱| 色婷婷av一区二区三区在线观看| 久久精品色欧美aⅴ一区二区| 亚洲美女喷白浆| 欧美性色视频在线| 亚洲成人久久久| 欧美影院成年免费版| 在线观看国产成人av片| 精品欧美激情精品一区| 欧美激情女人20p| 国产视频精品久久久| 中文字幕一区二区精品| 国产在线观看一区二区三区| 日产精品99久久久久久| 91久久嫩草影院一区二区| 欧美激情喷水视频| 欧美激情女人20p| 中文字幕欧美在线| 国产欧美精品va在线观看| 成人国产精品久久久久久亚洲| 色中色综合影院手机版在线观看| 欧美xxxx综合视频| 亚洲成色www8888| 色青青草原桃花久久综合| 亚洲欧美国产va在线影院| 午夜精品一区二区三区视频免费看| 疯狂做受xxxx欧美肥白少妇| 亚洲精品欧美日韩专区| 免费99精品国产自在在线| 亚洲第一网站男人都懂| 成人免费福利视频| 2019日本中文字幕| 国产精品免费久久久久久| 日韩精品亚洲元码| 日韩精品免费在线| 久久亚洲春色中文字幕| 国产成人精品电影久久久| 亚洲色图欧美制服丝袜另类第一页| 一本一道久久a久久精品逆3p| 亚洲人成电影在线观看天堂色| 日韩美女视频免费在线观看| 一区二区三区国产在线观看| 久久精品国产96久久久香蕉| 美女精品久久久| 欧美成人精品激情在线观看| 国产日产欧美精品| 菠萝蜜影院一区二区免费| 亚洲欧美中文字幕| 亚洲日本中文字幕免费在线不卡| 91成人在线视频| 亚洲性69xxxbbb| 91亚洲精品一区二区| 曰本色欧美视频在线| 日日骚久久av| 欧美俄罗斯性视频| 丝袜亚洲另类欧美重口| 国产精品∨欧美精品v日韩精品| 一本色道久久88综合日韩精品| 亚洲精品免费网站| 国产精品久久久久久久美男| 欧美精品videofree1080p| 亚洲欧洲高清在线| 国产精品女视频| 成人国产精品免费视频| 精品国产福利在线| 国产欧美精品在线播放| 欧美性猛交xxxx黑人猛交| 98精品在线视频| 伊人一区二区三区久久精品| 国产一区二区三区在线免费观看| 亚洲成**性毛茸茸| 亚洲欧美制服中文字幕| 成人伊人精品色xxxx视频| 欧美精品久久久久久久久久| 日韩电视剧在线观看免费网站| 亚洲人成在线电影| 亚洲欧美中文在线视频| 91日本视频在线|