set
宣告
let set = new Set();即創建了一個空的set
賦值
let set = new Set(['張三','李四','王五']);
特性
似于陣列,但它的一大特性就是所有元素都是唯一的,沒有重復,
我們可以利用這一唯一特性進行陣列的去重作業,
let set = new Set([1, 2, 2, 3, 4, 3, 5])
console.log(set) //Set(5) {1, 2, 3, 4, 5}
let arr1 = [1, 2, 3, 4]
let arr2 = [2, 3, 4, 5, 6]
let set2 = new Set([...arr1,...arr2]) //...是set轉陣列 后面有詳細的
console.log(set2)//Set(6) {1, 2, 3, 4, 5,6}
記住一個屬性和4個方法
屬性
set.size 長度
方法
add 增加
console.log(set.add('劉德華').add('旋之華'));
delete 洗掉
console.log(set.delete('張三'));
console.log(set.delete('李四'));
console.log(set);
has 檢測是否含有 回傳true和false
console.log(set.has('張三'));
console.log(set.has('張三1'));
clear 清楚全部 沒有回傳值
console.log(set.clear()); // undefined
console.log(set);
ste和array互轉
陣列轉set
let set = new Set(new Array(7, 8, 9))
console.log(set) // Set(3) {7, 8, 9
set轉陣列
let set4 = new Set([4, 5, 6])
console.log('方式一:', [...set4]) //方式一: (3) [4, 5, 6]
console.log('方式二:', Array.from(set4)) //方式二: (3) [4, 5, 6]
遍歷
可以使用Set實體物件的keys(),values(),entries()方法進行遍歷,
由于Set的鍵名和鍵值是同一個值,它的每一個元素的key和value是相同的,所有keys()和values()的回傳值是相同的,entries()回傳的元素中的key和value是相同的,
let set5 = new Set([4, 5, 'hello'])
console.log(' useing Set.keys()')
for(let item of set5.keys()) {
console.log(item)
}
console.log(' useing Set.values()')
for(let item of set5.values()) {
console.log(item)
}
console.log(' useing Set.entries()')
for(let item of set5.entries()) {
console.log(item)
}
結果
useing Set.keys()
5
hello
useing Set.values()
5
hello
useing Set.entries()
[ 4, 4 ]
[ 5, 5 ]
[ 'hello', 'hello' ]
map 和set大同小異
1. 創建一個Map
let obj1 = {a: 1}, obj2 = {b: 2};
const map = new Map([
['name', '張三'],
['age', 18],
['sex', '男'],
[obj1, '今天天氣很好'],
[obj2, '適合敲代碼'],
[[1,2], 'hhh']
]);
console.log(map);
console.log(map.size);
方法
set和get
map.set('friends', ['趙六', '力氣']).set(['dog'], '小花');
console.log(map);
console.log(map.get('name'));
console.log(map.get(obj1));

delete has clear
和set一樣
// delete
map.delete(obj1); // 洗掉指定的元素
console.log(map.delete('xxxx'));
console.log(map);
// has
console.log(map.has(obj1)); //有就回傳true
console.log(map.has(obj2)); //沒有就回傳false
// clear
map.clear(); //清空整個map
console.log(map);
keys() values() entries()
let obj1 = {a: 1}, obj2 = {b: 2};
const map = new Map([
['name', '張三'],
['age', 18],
['sex', '男'],
[obj1, '今天天氣很好'],
[obj2, '適合敲代碼'],
[[1,2], 'hhh']
]);
map.forEach(function (value, index) {
console.log(index + ':' + value);
})
遍歷
let obj1 = {a: 1}, obj2 = {b: 2};
const map = new Map([
['name', '張三'],
['age', 18],
['sex', '男'],
[obj1, '今天天氣很好'],
[obj2, '適合敲代碼'],
[[1,2], 'hhh']
]);
map.forEach(function (value, index) {
console.log(index + ':' + value);
})
//列印結果
name:張三
age:18
75 sex:男
[object Object]:今天天氣很好
5 [object Object]:適合敲代碼
1,2:hhh
注意事項
map.set({}, '呵呵呵呵呵');
map.set({}, '哈哈哈哈');
console.log({} === {}); //列印結果false
物件是參考型別,他們在堆區存放的地址是不一樣的 所以不全等!! 既然都做到這里了 那就來全面的復習復習 參考資料型別和基本資料型別的區別和堆疊的概念吧!!
地址: https://www.cnblogs.com/chenglianjie/p/11903852.html
symbol
Symbol是由ES6規范引入的一項新特性,它的功能類似于一種標識唯一性的ID,通常情況下,我們可以通過呼叫Symbol()函式來創建一個Symbol實體:
let s1 = Symbol()
或者,你也可以在呼叫Symbol()函式時傳入一個可選的字串引數,相當于給你創建的Symbol實體一個描述資訊:
let s2 = Symbol('another symbol')
由于Symbol是一種基礎資料型別,所以當我們使用typeof去檢查它的型別的時候,它會回傳一個屬于自己的型別symbol,而不是什么string、object之類的:
typeof s1 // 'symbol'
每個Symbol實體都是唯一的,因此,當你比較兩個Symbol實體的時候,將總會回傳false:
let s1 = Symbol()
let s2 = Symbol('another symbol')
let s3 = Symbol('another symbol')
s1 === s2 // false
s2 === s3 // false
用法
最大的用法是用來定義物件的唯一屬性名,
由于每一個 Symbol 的值都是不相等的,所以 Symbol 作為物件的屬性名,可以保證屬性不重名,
let sy = Symbol("key1");
// 寫法1
let syObject = {};
syObject[sy] = "kk";
console.log(syObject); // {Symbol(key1): "kk"}
// 寫法2
let syObject = {
[sy]: "kk"
};
console.log(syObject); // {Symbol(key1): "kk"}
const obj = {};
obj.name = '張三';
obj.name = '李四';
obj[Symbol('name')] = '張三';
obj[Symbol('name')] = '李四';
console.log(obj); //name: "李四"Symbol(name): "張三"Symbol(name): "李四" 物件設定相同name會覆寫,而symbol不會
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/169942.html
標籤:JavaScript
上一篇:DVWA滲透測驗初級練習
