es6入門

字符擴(kuò)展

"\u{20BB7}"? //正確解讀雙字節(jié)字符'??'

//codePointAt 正確處理4個(gè)字節(jié)儲存的字符感昼,返回一個(gè)字符的碼點(diǎn)。

var s = '??a';

for (let ch of s) {console.log(ch.codePointAt(0).toString(16));}

// 20bb7 ? ? ?61

//不能用for in(for in遍歷的是數(shù)組的索引杭朱,而for of遍歷的是數(shù)組元素值,正確識一個(gè)字符吹散。)

String.fromCodePoint

String.fromCodePoint(0x20BB7)// "??"

includes(), startsWith(), endsWith()

vars='Hello world!';

s.startsWith('Hello')// true

s.endsWith('!')// true

s.includes('o')// true

//使用第二個(gè)參數(shù)n時(shí),endsWith的行為與其他兩個(gè)方法有所不同八酒。它針對前n個(gè)字符空民,而其他兩個(gè)方法針對從第n個(gè)位置直到字符串結(jié)束。

repeat()

'x'.repeat(3)// "xxx"

'na'.repeat(0);'na'.repeat(NaN)// ""

padStart()羞迷,padEnd()

'x'.padStart(4,'ab')// 'abax'

'abc'.padStart(10,'0123456789')// '0123456abc'

'x'.padStart(4)// '? x'(空格填充)

'x'.padEnd(5,'ab')// 'xabab'

模板字符串(用反引號(`)標(biāo)識,ESC下方的按鍵)

$('#result').append(`?

?There are?${basket.count}?items in your basket.

`.trim());//.trim()去掉Threre前面的換行

正則

除了ig外添加了u(可識別碼點(diǎn)大于0xFFFF的 Unicode 字符)界轩,y(粘連,從剩余的第一個(gè)位置開始)

vars='aaa_aa_a';

varr1=/a+/g;

varr2=/a+/y;

r1.exec(s)// ["aaa"]

r2.exec(s)// ["aaa"]

r1.exec(s)// ["aa"]

r2.exec(s)// null

數(shù)值

二進(jìn)制和八進(jìn)制分別用前綴0b(或0B)和0o(或0O)表示衔瓮。

Number('0b111')// 7 ?轉(zhuǎn)為十進(jìn)制

Number.isFinite()用來檢查一個(gè)數(shù)值是否為有限

parseInt()和parseFloat()浊猾,移植到Number對象上面(不再是全局)

Number.isInteger()是否為整數(shù)(3.0也是整數(shù))

Number.EPSILON極小量(浮點(diǎn)數(shù)計(jì)算誤差能夠小于Number.EPSILON,我們就可以認(rèn)為得到了正確結(jié)果)

Number.MAX_SAFE_INTEGER和Number.MIN_SAFE_INTEGER表示JavaScript能夠準(zhǔn)確表示的整數(shù)范圍热鞍,Number.isSafeInteger()則是用來判斷一個(gè)整數(shù)是否落在這個(gè)范圍之內(nèi)葫慎。

Math.trunc獲取整數(shù)部分。(4.1返回4薇宠,-4.1返回-4偷办,相當(dāng)于returnx<0?Math.ceil(x):Math.floor(x);)

Math.cbrt方法用于計(jì)算一個(gè)數(shù)的立方根。

Math.hypot方法返回所有參數(shù)的平方和的平方根(Math.hypot(3,4);// 5)

Math.expm1()返回ex- 1

Math.log1p(x)方法返回1 + x的自然對數(shù)

Math.log10(x)返回以10為底的x的對數(shù)

Math.log2(x)返回以2為底的x的對數(shù)

Math.sinh(x)澄港,Math.cosh(x)椒涯,Math.tanh(x),Math.asinh(x)回梧,Math.acosh(x)废岂,Math.atanh(x)

指數(shù)運(yùn)算符(**)

2**3// 8

Integer對象,沒有位數(shù)的限制狱意,任何位數(shù)的整數(shù)都可以精確表示

1n+2n// 3n

Integer(123)// 123n

Integer 類型不能與 Number 類型進(jìn)行混合運(yùn)算湖苞。

0n==0// 報(bào)錯(cuò) TypeError

rest 參數(shù)(參數(shù)搭配的變量是一個(gè)數(shù)組,該變量將多余的參數(shù)放入數(shù)組中详囤。)

functionadd(...values)

{letsum=0;for(varval of values){sum+=val;}returnsum;}add(2,5,3)// 10

箭頭函數(shù)(函數(shù)體內(nèi)的this對象袒啼,就是定義時(shí)所在的對象,而不是使用時(shí)所在的對象)

varf=v=>v;

等同于:

varf=function(v){returnv;};

尾調(diào)用(函數(shù)的最后一步是調(diào)用另一個(gè)函數(shù))

functionf(x){if(x>0){returnm(x)}returnn(x);}

數(shù)組 運(yùn)算符擴(kuò)展

console.log(...[1,2,3])// 1 2 3

vararr1=[0,1,2];vararr2=[3,4,5];arr1.push(...arr2);

varnodeList=document.querySelectorAll('div');vararray=[...nodeList];//轉(zhuǎn)為數(shù)組

vargo=function*(){yield1;yield2;yield3;};[...go()]// [1, 2, 3](變量go是一個(gè) Generator 函數(shù))

Array.from()(將類似數(shù)組的對象和可遍歷的對象轉(zhuǎn)為真正的數(shù)組,返回一個(gè)新的數(shù)組)

letarrayLike={'0':'a','1':'b','2':'c',length:3};

letarr2=Array.from(arrayLike);// ['a', 'b', 'c']

Array.from([1,2,3],(x)=>x*x)//[1, 4, 9]類似map

copyWithin()

[1,2,3,4,5].copyWithin(0,2);// [3, 4, 5, 4, 5]

find() 和 findIndex()

[1,4,-5,10].find((n)=>n<0)// -5(用于找出第一個(gè)符合條件的數(shù)組成員)

[NaN].findIndex(y=>Object.is(NaN,y))// 0返回第一個(gè)符合條件的數(shù)組成員的位置(indexof不能識別NaN)

fill()填充數(shù)組蚓再,數(shù)組初始化

['a','b','c'].fill(7,1,2)// ['a', 7, 'c']從1號位開始滑肉,向原數(shù)組填充7,到2號位之前結(jié)束摘仅。

includes()數(shù)組是否包含給定的值

[1,2,3].includes(3,3);// false靶庙,第二個(gè)參數(shù)表示搜索的起始位置,可搜索NaN

對象

Object.is()//類似于===娃属,不同之處只有兩個(gè):一是+0不等于-0六荒,二是NaN等于自身。

Object.is(+0,-0)// false

Object.is(NaN,NaN)// true

Object.assign()對象的合并,淺拷貝,null和undefined不能為首參數(shù)

var target={a:1,b:1};var source1={b:2,c:2};var source2{c:3};

Object.assign(target,source1,source2);

target// {a:1, b:2, c:3}

typeofObject.assign(2)// "object"

Object.assign([1,2,3],[4,5])// [4, 5, 3]

getOwnPropertyDescriptors()返回指定對象所有自身屬性(非繼承屬性)的描述對象矾端。

Object.setPrototypeOf()設(shè)置一個(gè)對象的prototype對象掏击,返回參數(shù)對象本身(如果第一個(gè)參數(shù)不是對象,會自動(dòng)轉(zhuǎn)為對象秩铆。但是由于返回的還是第一個(gè)參數(shù)砚亭,所以這個(gè)操作不會產(chǎn)生任何效果。)

let proto={};let obj={x:10};

Object.setPrototypeOf(obj,proto);

proto.y=20;

obj.x// 10

obj.y// 20

Object.getPrototypeOf()讀取一個(gè)對象的原型對象殴玛。

Null 傳導(dǎo)運(yùn)算符

message?.body?.user?.firstName||'default'相當(dāng)于

(message&&message.body&&message.body.user&&message.body.user.firstName)||'default'

Symbol表示獨(dú)一無二的值捅膘,它是 JavaScript 語言的第七種數(shù)據(jù)類型,不能運(yùn)算滚粟,可以轉(zhuǎn)為布爾值和string

vars1=Symbol('foo');//函數(shù)可以接受一個(gè)字符串作為參數(shù)寻仗,表示對 Symbol 實(shí)例的描述

s1// Symbol(foo) ? ? ?s1.toString()// "Symbol(foo)"

var myS=Symbol();

var a={}; a[myS]='Hello!';//Symbol 值作為對象屬性名時(shí),不能用點(diǎn)運(yùn)算符凡壤,要用[]

Object.getOwnPropertySymbols方法署尤,可以獲取指定對象的所有 Symbol 屬性名(數(shù)組)。(for...in亚侠、for...of沐寺,Object.keys()、Object.getOwnPropertyNames()盖奈、JSON.stringify()中無返回)

let obj={

? ? ?[Symbol('my_key')]:1,

? ? ?enum:2,nonEnum:3};

Reflect.ownKeys(obj)//? ["enum", "nonEnum", Symbol(my_key)]

我們可以利用Symbol為對象定義一些非私有的混坞、但又希望只用于內(nèi)部的方法。

var s1=Symbol.for('foo');//使用同一個(gè)Symbol值(是全局環(huán)境的钢坦,可以在不同的 iframe 或 service worker 中取到同一個(gè)值究孕。)

var s2=Symbol.for('foo');//兩個(gè)都要用Symbol.for

s1===s2// true

var s1=Symbol.for("foo");

Symbol.keyFor(s1)// "foo"(已登記的 Symbol 類型值的key。)

Set(類似于數(shù)組爹凹,但是成員的值都是唯一的)

const s=new Set();[2,3,5,4,5,2,2].forEach(x=>s.add(x));

constset=newSet([...document.querySelectorAll('div')]);

[...newSet(array)]// 去除數(shù)組的重復(fù)成員厨诸,不會發(fā)生類型轉(zhuǎn)換,所以5和"5"是兩個(gè)不同的值(find)

let set=new Set();set.add({});set.add({});set.size// 2(兩個(gè)對象總是不相等的禾酱。)

add(value):添加某個(gè)值微酬,返回Set結(jié)構(gòu)本身绘趋。

delete(value):刪除某個(gè)值,返回一個(gè)布爾值颗管,表示刪除是否成功陷遮。

has(value):返回一個(gè)布爾值,表示該值是否為Set的成員垦江。

clear():清除所有成員帽馋,沒有返回值。

let a=new Set([1,2,3]);

let b=new Set([4,3,2]);

?let union=newSet([...a,...b]);// Set {1, 2, 3, 4}并集

?let intersect=newSet([...a].filter(x=>b.has(x)));// set {2, 3}交集

?let difference=newSet([...a].filter(x=>!b.has(x)));// Set {1}差集

WeakSet(類似set比吭,成員只能是對象绽族,適合臨時(shí)存放一組對象,以及存放跟對象綁定的信息衩藤。只要這些對象在外部消失吧慢,它在 WeakSet 里面的引用就會自動(dòng)消失)

WeakSet.prototype.add(value):向 WeakSet 實(shí)例添加一個(gè)新成員。

WeakSet.prototype.delete(value):清除 WeakSet 實(shí)例的指定成員赏表。

WeakSet.prototype.has(value):返回一個(gè)布爾值检诗,表示某個(gè)值是否在 WeakSet 實(shí)例之中。

WeakSet 不能遍歷底哗,是因?yàn)槌蓡T都是弱引用,隨時(shí)可能消失锚沸。WeakSet 的一個(gè)用處跋选,是儲存 DOM 節(jié)點(diǎn),而不用擔(dān)心這些節(jié)點(diǎn)從文檔移除時(shí)哗蜈,會引發(fā)內(nèi)存泄漏前标。

map(鍵值對的集合,“鍵”的范圍不限于字符串距潘,各種類型的值)

const map=new Map();map.set(['a'],555);//可用鏈?zhǔn)綄懛?/p>

map.get(['a'])// undefined(內(nèi)存地址是不一樣的炼列,因此get方法無法讀取該鍵)

Map 的遍歷順序就是插入順序。

WeakMap(只接受對象作為鍵名(null除外))

WeakMap 應(yīng)用的典型場合就是 DOM 節(jié)點(diǎn)作為鍵名

let myElement=document.getElementById('logo');?

let myWeakmap=new WeakMap();

myWeakmap.set(myElement,{timesClicked:0});

myElement.addEventListener('click',function(){letlogoData=myWeakmap.get(myElement);

logoData.timesClicked++;},false);//一旦這個(gè) DOM 節(jié)點(diǎn)刪除音比,該狀態(tài)就會自動(dòng)消失俭尖,不存在內(nèi)存泄漏風(fēng)險(xiǎn)。

Proxy

ECMAScript 6 入門

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末洞翩,一起剝皮案震驚了整個(gè)濱河市稽犁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌骚亿,老刑警劉巖已亥,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異来屠,居然都是意外死亡虑椎,警方通過查閱死者的電腦和手機(jī)震鹉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來捆姜,“玉大人传趾,你說我怎么就攤上這事〗课矗” “怎么了墨缘?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長零抬。 經(jīng)常有香客問我镊讼,道長,這世上最難降的妖魔是什么平夜? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任蝶棋,我火速辦了婚禮,結(jié)果婚禮上忽妒,老公的妹妹穿的比我還像新娘玩裙。我一直安慰自己,他們只是感情好段直,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布吃溅。 她就那樣靜靜地躺著,像睡著了一般鸯檬。 火紅的嫁衣襯著肌膚如雪决侈。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天喧务,我揣著相機(jī)與錄音赖歌,去河邊找鬼。 笑死功茴,一個(gè)胖子當(dāng)著我的面吹牛庐冯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播坎穿,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼展父,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了玲昧?” 一聲冷哼從身側(cè)響起犯祠,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎酌呆,沒想到半個(gè)月后衡载,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡隙袁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年痰娱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了弃榨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,137評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡梨睁,死狀恐怖鲸睛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情坡贺,我是刑警寧澤官辈,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站遍坟,受9級特大地震影響拳亿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜愿伴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一肺魁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧隔节,春花似錦鹅经、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至幻妓,卻和暖如春蹦误,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背涌哲。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工胖缤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留尚镰,地道東北人阀圾。 一個(gè)月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像狗唉,于是被迫代替她去往敵國和親初烘。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 三分俯,字符串?dāng)U展 3.1 Unicode表示法 ES6 做出了改進(jìn)肾筐,只要將碼點(diǎn)放入大括號,就能正確解讀該字符缸剪。有了這...
    eastbaby閱讀 1,537評論 0 8
  • ES6引入了一種新的原始數(shù)據(jù)類型Symbol吗铐,表示讀一無二的值,它是js語言的第七種數(shù)據(jù)類型杏节,前六種undefin...
    南藍(lán)NL閱讀 367評論 0 1
  • 正則的擴(kuò)展 1唬渗、RegExp構(gòu)造函數(shù) 在ES5中典阵,RegExp構(gòu)造函數(shù)的參數(shù)有兩種情況。第一種情況是镊逝,參數(shù)是字符串...
    南藍(lán)NL閱讀 277評論 0 1
  • 就算我不在你的視線里壮啊,也請偶爾轉(zhuǎn)過身!
    qtpifan閱讀 168評論 0 0
  • http://code.cocoachina.com/view/125104 http://blog.csdn.n...
    階梯閱讀 205評論 0 0