es2018 引入了具名組匹配(named capture groups),允許為每乙個組匹配指定乙個名字,既便於閱讀**,又便於引用。同時,數字序號(matchobj[1])依然有效。
const
re_date
=/(?\d)-(?\d)-(?\d)/
;const matchobj =
re_date
.exec
('1999-12-31');
const year = matchobj.groups.year;
// 1999
const month = matchobj.groups.month;
// 12
const day = matchobj.groups.day;
// 31
如果具名組沒有匹配,那麼對應的groups物件屬性會是undefined。
const
re_opt_a
=/^(?a+)?$/
;const matchobj =
re_opt_a
.exec(''
);matchobj.groups.
as// undefined
'as'
in matchobj.groups // true
上面**中,具名組as沒有找到匹配,那麼matchobj.groups.as屬性值就是undefined,並且as這個鍵名在groups是始終存在的。
指定了預設值以後,函式的length屬性,將返回沒有指定預設值的引數個數。也就是說,指定了預設值後,length屬性將失真。
(
function
(a))
.length // 1
(function
(a =5)
).length // 0
(function
(a, b, c =5)
).length // 2
這是因為length屬性的含義是,該函式預期傳入的引數個數。某個引數指定預設值以後,預期傳入的引數個數就不包括這個引數了。同理,後文的 rest 引數也不會計入length屬性。
(
function
(...args)
).length // 0
如果設定了預設值的引數不是尾引數,那麼length屬性也不再計入後面的引數了。
(
function
(a =
0, b, c)
).length // 0
(function
(a, b =
1, c)
).length // 1
陣列的成員有時還是陣列,array.prototype.flat()用於將巢狀的陣列「拉平」,變成一維的陣列。該方法返回乙個新陣列,對原資料沒有影響。
[1,
2,[3
,4]]
.flat()
// [1, 2, 3, 4]
flat()預設只會「拉平」一層,如果想要「拉平」多層的巢狀陣列,可以將flat()方法的引數寫成乙個整數,表示想要拉平的層數,預設為1。
[1,
2,[3
,[4,
5]]]
.flat()
// [1, 2, 3, [4, 5]][1
,2,[
3,[4
,5]]
].flat(2
)// [1, 2, 3, 4, 5]
如果不管有多少層巢狀,都要轉成一維陣列,可以用infinity關鍵字作為引數。
[1,
[2,[
3]]]
.flat
(infinity
)// [1, 2, 3]
如果原陣列有空位,flat()方法會跳過空位。
[1,
2,,4
,5].
flat()
// [1, 2, 4, 5]
flatmap()方法對原陣列的每個成員執行乙個函式(相當於執行array.prototype.map()),然後對返回值組成的陣列執行flat()方法。該方法返回乙個新陣列,不改變原陣列。
// 相當於 [[2, 4], [3, 6], [4, 8]].flat()[2
,3,4
].flatmap
((x)
=>
[x, x *2]
)// [2, 4, 3, 6, 4, 8]
flatmap()只能展開一層陣列。
// 相當於 [[[2]], [[4]], [[6]], [[8]]].flat()[1
,2,3
,4].
flatmap
(x =>
[[x *2]
])// [[2], [4], [6], [8]]
上面**中,遍歷函式返回的是乙個雙層的陣列,但是預設只能展開一層,因此flatmap()返回的還是乙個巢狀陣列。
es6 提供了新的資料結構 set。它類似於陣列,但是成員的值都是唯一的,沒有重複的值。
展示了一種去除陣列重複成員的方法。
[
...new
set(array)
]
展示了一種去除字串裡面的重複字元。
[
...new
set(
"abcddeeee")]
.join(''
);//abcde
es6常用知識總結
es6已經出了2年左右的時間了,雖然部分瀏覽器沒有支援es6,不過在babel等幫助下,我們依然可以使用es6相關的內容,現在對es6常用內容的總結。變數結構是按照一堆的規則從陣列或者物件中提取值並賦予給變數。陣列解構 let x,y,z 1,2,3 console.log x 1 console....
前端知識整理 ES6
es6 1 模組化 export default export function fn1 export function fn2 import util from util1.js import from util2.js 2 使用babel npm install babel core babel...
es6 知識總結 4
我們在程式設計過程中常常用到物件導向,物件建立例項這個方法,但是es6中給我封裝了乙個class類 下邊給大家介紹一下 萬事萬物皆物件 1.類是由物件 抽象 泛化出來的 2.物件是由類建立出來的 3.物件叫類的具體例項 function person name,age person.prototyp...