聲明:let 和const ,(1)沒(méi)有變量提升 (2)不能重新賦值 (3)有塊級(jí)作用域
(4) let 可以重復(fù)賦值 , const不能重復(fù)賦值
對(duì)象的三個(gè)方法:
- Object.keys( obj ) 獲得對(duì)象中的所有的鍵,以數(shù)組的形式返回
- Object.values( obj ) 獲得對(duì)象中的所有的屬性的值,以數(shù)組的形式返回
- Object.entries( obj ) 獲得對(duì)象中所有的成員,以數(shù)組的形式返回,數(shù)組的每個(gè)元素是對(duì)象的鍵 和 值組成的數(shù)組
- Object.assign(target,source) 把源對(duì)象復(fù)制到目標(biāo)對(duì)象,返回目標(biāo)對(duì)象
數(shù)值的擴(kuò)展
ES6 在Number對(duì)象上院溺,新提供了Number.isFinite()和Number.isNaN()兩個(gè)方法们镜。
- Number.isFinite(), 用來(lái)檢查一個(gè)數(shù)值是否為有限的(finite)梦重,即不是Infinity
如果參數(shù)類(lèi)型不是數(shù)值炊甲,Number.isFinite一律返回false。只對(duì)數(shù)值有效
Number.isFinite(15); // true
Number.isFinite(0.8); // true
Number.isFinite(NaN); // false
Number.isFinite(Infinity); // false
Number.isFinite(-Infinity); // false
Number.isFinite('foo'); // false
Number.isFinite('15'); // false
Number.isFinite(true); // false
- Number.isNaN() , 用來(lái)檢查一個(gè)值是否為NaN衔沼。如果參數(shù)類(lèi)型不是NaN蝌借,Number.isNaN一律返回false。只對(duì)數(shù)值有效
Number.isNaN(NaN) // true
Number.isNaN(15) // false
Number.isNaN('15') // false
Number.isNaN(true) // false
Number.isNaN(9/NaN) // true
Number.isNaN('true' / 0) // true
Number.isNaN('true' / 'true') // true
- Number.parseInt(), Number.parseFloat()
ES6 將全局方法parseInt()和parseFloat()指蚁,移植到Number對(duì)象上面菩佑,行為完全保持不變。
// ES5的寫(xiě)法
parseInt('12.34') // 12
parseFloat('123.45#') // 123.45
// ES6的寫(xiě)法
Number.parseInt('12.34') // 12
Number.parseFloat('123.45#') // 123.45
// 這樣做的目的凝化,是逐步減少全局性方法稍坯,使得語(yǔ)言逐步模塊化。
Number.parseInt === parseInt // true
Number.parseFloat === parseFloat // true
- BigInt 數(shù)據(jù)類(lèi)型
字符串的方法:
- str.includes() 找到str中包含某個(gè)字符,返回true,找不到返回false
let str = 'hello'
console.log(str.includes('e')) // true
- str.startWith(參數(shù)1,參數(shù)2) 如果str以指定字符串開(kāi)頭,返回true,否則返回false, 參數(shù)1:指定字符串 參數(shù)2:開(kāi)始搜索的位置
一般用來(lái)判斷是否以'http://'開(kāi)頭或者以'file://' 開(kāi)頭
let str = 'hello'
console.log(str.startWith('h')) // true
- str.endWith(參數(shù)1,參數(shù)2) 如果字符串以指定字符串結(jié)尾,返回true,否則,返回false,參數(shù)1:指定字符串 參數(shù)2:開(kāi)始搜索的位置,從后往前搜索
一般判斷這個(gè)字符串是不是以 '.png' '.jpg' 等這種
let str = 'hello'
console.log(str.endWith('o')) // true
- 字符串的pad()方法,補(bǔ)全字符串
str.padStart(參數(shù)1,參數(shù)2) 在字符串的前面補(bǔ)齊,參數(shù)1:字符串的總位數(shù),參數(shù)2:用什么補(bǔ)全
str.padEnd(參數(shù)1,參數(shù)2) 在字符串的后面補(bǔ)齊,參數(shù)1:字符串的總長(zhǎng)度,參數(shù)2:用什么補(bǔ)全 - repeat方法返回一個(gè)新字符串搓劫,表示將原字符串重復(fù)n次瞧哟。
'x'.repeat(3) // "xxx"
'hello'.repeat(2) // "hellohello"
'na'.repeat(0) // ""
- trimStart(),trimEnd()
ES2019對(duì)字符串實(shí)例新增了`trimStart()`和`trimEnd()`這兩個(gè)方法枪向。
它們的行為與`trim()`一致勤揩,`trimStart()`消除字符串頭部的空格,`trimEnd()`消除尾部的空格秘蛔。
它們返回的都是新字符串陨亡,不會(huì)修改原始字符串傍衡。
const s = ' abc ';
s.trim() // "abc"
s.trimStart() // "abc "
s.trimEnd() // " abc"
- matchAll(), 返回一個(gè)正則表達(dá)式在當(dāng)前字符串的所有匹配
數(shù)組的擴(kuò)展:
Array.of() 用于將一組值,轉(zhuǎn)換成數(shù)組. eg:Array.of(3, 11, 8) // [3,11,8]
數(shù)組的方法:
every() 遍歷數(shù)組的每一項(xiàng),如果每一項(xiàng)都滿足條件,則會(huì)返回true,不會(huì)改變?cè)瓟?shù)組
some() 遍歷數(shù)組的每一項(xiàng),如果任何一項(xiàng)滿足條件,則會(huì)返回true,不會(huì)改變?cè)瓟?shù)組
filter() 遍歷數(shù)組中的每一項(xiàng),返回一個(gè)符合條件的數(shù)組
forEach() 遍歷數(shù)組的每一項(xiàng),沒(méi)有返回值,無(wú)論怎樣,返回的都是undefined,不會(huì)通過(guò)return或者
break跳出循環(huán),也不會(huì)改變?cè)亟M
map() 不改變?cè)瓟?shù)組,返回一個(gè)新數(shù)組
find() 返回?cái)?shù)組中第一個(gè)符合條件的元素,如果沒(méi)有符合條件的,就返回undefined
for in 遍對(duì)象中的每個(gè)鍵(屬性名)
for of 可以用來(lái)遍歷字符串中的每個(gè)字符
set 和數(shù)組類(lèi)似 常用于數(shù)組去重
1.聲明 let set = new Set();即創(chuàng)建了一個(gè)空的set
2.賦值 let set = new Set(['張三','李四','王五']); 實(shí)例化一個(gè)set對(duì)象,并賦值
3.有數(shù)組去重的作用 let set = new Set(['張三','李四','王五','張三','李四'])
輸出結(jié)果還是 張三,李四负蠕,王五
set.add() 在set中新增一個(gè)元素
set.delete() 刪除一個(gè)元素,返回true或者false
set.has() 判斷set中是否有某個(gè)元素,返回true或者false
set.clear() 清除set集合中的所有元素,沒(méi)有返回值
正則表達(dá)式(regular expression)
async 和 await:
使用async/await來(lái)發(fā)送異步請(qǐng)求,從服務(wù)端獲取數(shù)據(jù),代碼簡(jiǎn)潔
async的用法:
它作為一個(gè)關(guān)鍵字放到函數(shù)的前面,表示該函數(shù)是一個(gè)異步函數(shù),因?yàn)閍sync就是異步的意思
異步函數(shù)也就意味著該函數(shù)的執(zhí)行不會(huì)阻塞后面代碼的執(zhí)行
調(diào)用異步函數(shù)的方法與調(diào)用普通函數(shù)的方法一樣,直接函數(shù)名加括號(hào)就調(diào)用了
async函數(shù)返回是一個(gè)promise對(duì)象,如果想要獲取到promise返回值,調(diào)用異步函數(shù)時(shí)后面接著.then,如果函數(shù)內(nèi)部拋出錯(cuò)誤,promise對(duì)象有一個(gè)catch方法進(jìn)行捕獲,用法與then一樣
await關(guān)鍵字只能放到async函數(shù)里面,await后面放一個(gè)返回promise對(duì)象的表達(dá)式
在async函數(shù)里面遇到await后,代碼就不往下執(zhí)行了,等待await后面的promise對(duì)象執(zhí)行完畢,并且拿到promise resolve的值并返回,返回值拿到后,它才繼續(xù)向下執(zhí)行
如果async 函數(shù)中有返回一個(gè)值 ,當(dāng)調(diào)用該函數(shù)時(shí)蛙埂,內(nèi)部會(huì)調(diào)用Promise.resolve() 方法把它轉(zhuǎn)化成一個(gè)promise 對(duì)象作為返回
但是如果async函數(shù)內(nèi)部拋出錯(cuò)誤,那么就會(huì)調(diào)用Promise.reject()返回一個(gè)promise對(duì)象
es6 對(duì)象的深復(fù)制與淺復(fù)制
如果把對(duì)象a賦值給b,改動(dòng)了b的數(shù)據(jù),那么也會(huì)a的數(shù)據(jù)也會(huì)相應(yīng)的改變,因?yàn)閍和b都指向的是同一個(gè)地址,a===b,這就是深復(fù)制,復(fù)制的不僅僅是數(shù)據(jù),而且連地址也一起復(fù)制過(guò)來(lái)了
淺復(fù)制,用...的語(yǔ)法,原理其實(shí)是:利用for in 把對(duì)象a中的屬性拷貝給b,只拷貝了一個(gè)副本,當(dāng)修改對(duì)象b的值是不會(huì)改變對(duì)象a的值的
let b = {...a} 淺復(fù)制a賦值給b,不會(huì)復(fù)制地址