ES6新特性使用小結(三)

2022-09-14 01:18:12 字數 4095 閱讀 5520

/*

* symbol 資料型別 概念: symbol 提供乙個獨一無二的值

* */

console.log('obj',obj); //

for(let [key,value] of object.entries(obj))

object.getownpropertysymbols(obj).foreach(

function

(item) )

reflect.ownkeys(obj).foreach(

function (item) )

}

/*

* es6中的資料結構 set() weakset() map() weakmap()

* */

} 字串『2』和數值2同時存在}/*

* set例項方法 add delete clear has

* */

console.log('clear', list.clear(), list) //

set(0) {}}/*

* 對set資料結構的遍歷

* */

for(let v of list.values())

for(let [k,v] of list.entries())

list.foreach(

function

(item) )}/*

* weakset 支援的資料型別必須是 *物件

* weakset中的物件都是弱引用 不會和垃圾**機制掛鉤

* * weakset 不能遍歷,是因為成員都是弱引用,隨時可能消失,遍歷不能保證成員的存在。

* 可能剛剛遍歷結束,成員就取不到了。weakset的乙個用處是儲存dom節點,而不用擔心這些節點從文件移除時,會引起記憶體的洩露。

* weakset結構有以下方法

* weakset.add(value):向weakset例項新增乙個新成員。

* weakset.delete(value):刪除weakset例項指定成員。

* weakset.has(value):返回乙個布林值,表示某個值是否在weakset例項中。

* */

; weaklist.add(arg);

//invalid value used in weak set}/*

* map資料結構 map的key值可以為任意型別

* */

使用陣列作為key

} console.log('size', map.size); //

size 2

console.log('get', map.get('a')); //

get 123

console.log('delete', map.delete('a'), map); //

delete true map(1)

console.log('clear', map.clear(), map); //

clear undefined map(0) {}}/*

* weakmap weakmap 接受的key值必須為物件 其他同weakset

* */

; weakmap.set(o, 123);

console.log('weakmap', weakmap.get(o)); //

weakmap 123}/*

* set 和 array

* */

); arr.push();

console.log('ser-arr', set, arr);

//查let set_exist = set.has(); //

false 引用型別的位址不同

let arr_exist = arr.find(item=>item.t);

//改set.foreach(item=>item.t ? item.t = 2 : '');

arr.foreach(item=>item.t ? item.t = 2 : '');

console.log('set-arr-modify', set, arr);

//刪set.foreach(item=>item.t ? set.delete(item) : '')

let index = arr.findindex(item=>item.t); //

查詢每個元素中包含t的索引

arr.splice(index, 1);

console.info('set-arr-empty', set, arr); //

map-delete set(0) {} }/*

* map 和 array

* */

); console.info('map-array', map, arr);

//查let map_exist = map.has('t'); //

boolean

let array_exist = arr.find(item=>item.t); //

如果存在 則返回資料的值

console.info('map-array', map_exist, array_exist); //

map-array true //改

map.set('t', 2);

arr.foreach(item=>item.t ? item.t = 2 : '');

console.info('map-modify', map, arr); //

map-modify map(1)

//刪除

map.delete('t');

let index = arr.findindex(item=>item.t); //

查詢每個元素中包含t的索引

arr.splice(index, 1);

console.info('map-empty', map, arr); //

map-delete map(0) {} }/*

* map,set,object 的對比

* */

; let map = new

map();

let set = new

set();

let obj ={};

//增map.set('t', 1);

set.add(item);

obj['t'] = 1;

console.info('map-set-obj', map, set, obj); //

map-set-obj map(1) set(1) } //查

console.info(

//)//改

map.set('t',2);

item.t=2; //

set 儲存引用位址

obj['t']=2;

console.info('map-set-obj-modify', map, set, obj); //

map-set-obj-modify map(1) set(1) } //刪

map.delete('t');

set.

delete

(item);

delete obj['t'];

console.info('map-set-empty', map,set, arr);}/*

* 對比小結: map>set>array=object

* 1、在開發過程中涉及到的資料結構 能使用map 不使用 array 尤其是複雜的資料結構使用

* 2、如果對資料結構中的唯一性有要求 考慮使用set 放棄使用object做儲存

* */

ES6新特性使用小結(四)

proxy 的概念和常用方法 let monitor new proxy obj,set target,key,value else 攔截 key in object 操作 has target,key else 攔截對 delete 操作 deleteproperty target,key els...

es6新特性 ES6新特性(一)

var 1 var宣告的是函式作用域 區域性 但在if for等定義的變數是全域性的 2 var 具有變數提公升,預解析 3 在同乙個作用域下,var可以宣告多次 4 var 宣告的變數會掛載到window上 let1 let不存在變數提公升,在變數使用之前,必須要先宣告 2 let在同一作用域下,...

ES6新特性(三) 函式擴充套件

1.1.方法的形參可以賦預設值,在呼叫方法時,如果沒有與之對應的實參則使用形參的預設值。1.2.賦預設值的形參的後面不能有普通形參 沒有賦預設值的形參 1.2.1.預設值只在沒有傳參或者引數為undefined時使用預設值,如果引數為null,則不適用預設值。函式的引數預設值 賦預設值的形參在普通引...