2-44鍾靜雯_day03
Day03作業 資料結構
概述 基本型別和引用型別
基本型別:String Boolean Number Null Undefined Symbol Bigint。
引用型別:Object(儲存屬性和屬性值) Function。
區別:
(記憶體儲存)基本型別儲存在棧(Stack)裡面;引用型別在棧上儲存對堆上資料的引用(指標),在堆(Heap)上儲存引用型別本身的資料。
(清理方式)基本型別函式和方法執行完就清理記憶體;引用型別採用垃圾回收機制。
物件 儲存屬性和屬性值
定義物件:
Object構造器
物件字面量
陣列 有序的值的列表
(與其他程式語言相比)區別:
陣列的每個槽位可以儲存任意型別的資料。
動態大小 —— 影響效能。
定義陣列:(宣告)
陣列構造器
陣列字面量
初始化:
解構陣列:將陣列中的元素取出來賦值給變數。
陣列的屬性和方法:
length屬性:陣列的長度。
const avengers = [‘美國隊長’,‘鋼鐵俠’,‘雷神’,‘綠巨人’];
console.log(avengers.length);
// 通過設定length屬性改變陣列元素(不可逆轉的改變,無副本)
avengers.length = 1;
console.log(avengers);// [ ‘美國隊長’ ]
avengers.length = 5;
console.log(avengers);// <1 empty item> Undefined
// 不改變陣列元素:將length設為只讀屬性get。
pop()方法:刪掉陣列中最後一個元素。
// 宣告陣列
const avengers = [‘美國隊長’,‘鋼鐵俠’,‘雷神’,‘綠巨人’];
// 陣列維數縮小
console.log(avengers.pop());
console.log(avengers);
// delete運算子:元素個數沒變,刪掉元素變為Undefined
const avengers = [‘美國隊長’,‘鋼鐵俠’,‘雷神’,‘綠巨人’];
delete avengers[0];
console.log(avengers);
pop()方法和delete運算子的區別:pop陣列元素個數減少,delete運算子元素個數沒變。
push()方法:將新值新增到陣列的末尾。
const avengers = [‘美國隊長’,‘鋼鐵俠’,‘雷神’,‘綠巨人’];
avengers.push(‘蝙蝠俠’);
console.log(avengers);
shift()方法:刪除陣列中的第一個元素。
const avengers = [‘美國隊長’,‘鋼鐵俠’,‘雷神’,‘綠巨人’];
avengers.shift();
console.log(avengers);// [ ‘鋼鐵俠’, ‘雷神’, ‘綠巨人’ ]
console.log(avengers.shift());// 輸出刪除元素 鋼鐵俠
unshift()方法:將新值新增到陣列的開頭。
const avengers = [‘美國隊長’,‘鋼鐵俠’,‘雷神’,‘綠巨人’];
avengers.unshift(‘小超人’);
console.log(avengers);
console.log(avengers.unshift());
concat()方法:陣列合並。
const avengers = [‘美國隊長’,‘鋼鐵俠’,‘雷神’,‘綠巨人’];
const heroes = [‘蝙蝠俠’,‘神奇女俠’,‘閃電俠’,‘水行俠’];
const oArray = avengers.concat(heroes);// 賦值給變數,變數是新生成的陣列。
console.log(avengers);
console.log(oArray);// 新建陣列,進行合併。
// 擴充套件運算子:ES6新增。
const avengers = [‘美國隊長’,‘鋼鐵俠’,‘雷神’,‘綠巨人’];
const heroes = [‘蝙蝠俠’,‘神奇女俠’,‘閃電俠’,‘水行俠’];
const oArray = […avengers,…heroes];// 元素扁平化
console.log(oArray);
join()方法:陣列變成組合了陣列所有元素的字串。
const avengers = [‘美國隊長’,‘鋼鐵俠’,‘雷神’,‘綠巨人’];
const a = avengers.join(&
);// 變數
console.log(a);
slice()方法:從原始陣列中切掉一片,從而建立一個子陣列。
const avengers = [‘美國隊長’,‘鋼鐵俠’,‘雷神’,‘綠巨人’];
const b = avengers.slice(2,3); // 從第二個元素開始到第三個元素結束(不包含)
console.log(b);// [ ‘雷神’ ]
console.log(avengers);
reverse()方法:反轉陣列中元素的次序(永久性改變)。
const d = [‘a’,‘b’,‘c’,‘d’];
const e = d.reverse();// 賦值給變數
console.log(e,d);// [ ‘d’, ‘c’, ‘b’, ‘a’ ] [ ‘d’, ‘c’, ‘b’, ‘a’ ]
indexOf():檢測陣列中是否包含一個特定值,如果找到了,就返回該值在陣列中第一次出現的索引號,否則,就返回-1。
const avengers = [‘美國隊長’,‘鋼鐵俠’,‘雷神’,‘綠巨人’];
const a1 = avengers.indexOf(‘美國隊長1’);
console.log(a1);// 0
includes():檢測陣列中是否包含特定值,如果找到了,就返回true,否則就返回false。
const avengers = [‘美國隊長’,‘鋼鐵俠’,‘雷神’,‘綠巨人’];
const a2 = avengers.includes(‘美國隊長2’);
console.log(a2);// false
多維陣列:
作用:座標系統(二維陣列)以及複雜演算法。
舉例:
const ma = [[1,2],[3,4]];
console.log(ma[0][0]);// 訪問元素
const summer = [‘Jun’,‘Jul’,‘Aug’];
const winter = [‘Dec’,‘Jan’,‘Feb’];
const nested = [summer,winter];
console.log(nested);// [ [ ‘Jun’, ‘Jul’, ‘Aug’ ], [ ‘Dec’, ‘Jan’, ‘Feb’ ] ]
// 擴充套件運算子扁平化為字串
const summer = [‘Jun’,‘Jul’,‘Aug’];
const winter = [‘Dec’,‘Jan’,‘Feb’];
const flat = […summer,…winter];
console.log(flat);// [ ‘Jun’, ‘Jul’, ‘Aug’, ‘Dec’, ‘Jan’, ‘Feb’ ]
1
2
3
4
5
6
7
8
9
10
11
12
陣列去重:(Set和陣列的轉換)
const a = [1,2,12,1,2,3,4,5];// 迴圈讀取一個一個判斷
const b = new Set(a);
console.log(b);// Set { 1, 2, 12, 3, 4, 5 }
const c = […b];// 集合變陣列
console.log©;
1
2
3
4
5
集合 唯一值的集合
定義集合:
建構函式,無字面量。
// 數字
const list = new Set();
list.add(1);
list.add(2).add(3).add(4).add(5);// 鏈式儲存
list.add(5);// 不能有重複值,直接忽略。
console.log(list);
// 初始化時用陣列
const list = new Set([1,2,3,4,5]);
console.log(list);
// 字元
const c = new Set(‘Hello’);
console.log©;
// 鏈式操作,返回的一定是建立的本身
const list4 = new Set().add(‘the’).add(‘quick’).add(‘brown’).add(‘fox’);
console.log(list4);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
屬性和方法:
size屬性:獲取集合中值的數目。(只讀屬性)
const list4 = new Set().add(‘the’).add(‘quick’).add(‘brown’).add(‘fox’);
console.log(list4.size);
const list4 = new Set().add(‘the’).add(‘quick’).add(‘brown’).add(‘fox’);
list4.size = 3;
console.log(list4);
1
2
3
4
5
6
has()方法:用於檢測一個值是否在集合中,返回true或者false。
const list4 = new Set().add(‘the’).add(‘quick’).add(‘brown’).add(‘fox’);
console.log(list4.has(‘brown’));
1
2
delete()方法:從集合中刪除一個值。
const list4 = new Set().add(‘the’).add(‘quick’).add(‘brown’).add(‘fox’);
list4.delete(‘the’);
console.log(list4);
1
2
3
clear()方法:刪掉集合中的所有值。
const list4 = new Set().add(‘the’).add(‘quick’).add(‘brown’).add(‘fox’);
list4.clear();
console.log(list4);
1
2
3
Set和陣列的轉換:陣列去重也用到了。擴充套件運算子 Array.from() 方法
const list4 = new Set().add(‘the’).add(‘quick’).add(‘brown’).add(‘fox’);
const oArray = […list4]; // 集合轉陣列
console.log(oArray);
// 陣列方法
const list4 = new Set().add(‘the’).add(‘quick’).add(‘brown’).add(‘fox’);
const oArray = Array.from(list4);
console.log(oArray);
1
2
3
4
5
6
7
8
集合 唯一值的集合
當物件新增到Set中時,只要Set存在,它們就會一直儲存在Set中,即使對物件的原始引用被刪除了依然如此。用技術術語來說,就是物件阻止被垃圾回收,而這會導致記憶體洩漏。
WeakSet 通過垃圾回收任何引用原始引用已經被刪掉的“死物件”,從而可以避免這種情況。
WeakSet 只能新增非基本型別資料,否則會丟擲一個型別錯誤(TypeError)。
// Set強集合 記憶體洩漏
let array1 = [1, 2, 3];
let array2 = [3, 4, 5];
const strong = new Set().add(array1).add(array2); // 建集合,新增陣列。
console.log(strong.has(array1));
array1 = null; // 刪除對原始物件的引用
array2 = null; // 原來陣列設定為空
array3 = […strong][0]; // 1
array4 = […strong][1];
console.log(array3);
console.log(array4);// 陣列還在
// WeakSet 避免記憶體洩漏
let array1 = [1,2,3];
let array2 = [3,4,5];
const weak = new WeakSet().add(array1).add(array2);// 扁平化
console.log(weak);
array1 = null; // 垃圾回收
array2 = null;
const array3 = […weak][0];
const array4 = […weak][1];
// 丟擲異常
console.log(array3);
console.log(array4);// 型別錯誤,物件消失,不能引用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Map 儲存鍵值對列表
建立Map:
const romanNumerals = new Map();
romanNumerals.set(1,‘I’);
romanNumerals.set(2,‘II’).set(3,‘III’).set(4,‘IV’).set(5,‘V’);
console.log(romanNumerals);// Map { 1 => ‘I’, 2 => ‘II’, 3 => ‘III’, 4 => ‘IV’, 5 => ‘V’ }
1
2
3
4
方法和屬性:
size屬性:獲取鍵和值的數量。(只讀屬性)
const romanNumerals = new Map();
romanNumerals.set(1,‘I’);
romanNumerals.set(2,‘II’).set(3,‘III’).set(4,‘IV’).set(5,‘V’);
console.log(romanNumerals.size);// 5
1
2
3
4
get(key):通過鍵獲取值。
const romanNumerals = new Map();
romanNumerals.set(1,‘I’);
romanNumerals.set(2,‘II’).set(3,‘III’).set(4,‘IV’).set(5,‘V’);
console.log(romanNumerals.get(3));// III
1
2
3
4
has(key):檢測一個特定鍵是否在對映中。
const romanNumerals = new Map();
romanNumerals.set(1,‘I’);
romanNumerals.set(2,‘II’).set(3,‘III’).set(4,‘IV’).set(5,‘V’);
console.log(romanNumerals.has(5));// true
1
2
3
4
delete(key):從對映中刪除一個鍵值對。
const romanNumerals = new Map();
romanNumerals.set(1,‘I’);
romanNumerals.set(2,‘II’).set(3,‘III’).set(4,‘IV’).set(5,‘V’);
romanNumerals.delete(5);
console.log(romanNumerals);// Map { 1 => ‘I’, 2 => ‘II’, 3 => ‘III’, 4 => ‘IV’ }
1
2
3
4
5
clear():從對映中刪除所有鍵值對。
const romanNumerals = new Map();
romanNumerals.set(1,‘I’);
romanNumerals.set(2,‘II’).set(3,‘III’).set(4,‘IV’).set(5,‘V’);
romanNumerals.clear();
console.log(romanNumerals);
1
2
3
4
5
Map轉換為陣列:
擴充套件運算子
Array.from() 方法
//map to array
const romanNumerals = new Map();
romanNumerals.set(1,‘I’).set(2,‘II’).set(3,‘III’).set(4,‘IV’).set(5,‘V’);// 鏈式
const oArray1 = […romanNumerals];
const oArray2 = Array.from(romanNumerals);
console.log(oArray1);
console.log(oArray2);
// [ [ 1, ‘I’ ], [ 2, ‘II’ ], [ 3, ‘III’ ], [ 4, ‘IV’ ], [ 5, ‘V’ ] ]
// [ [ 1, ‘I’ ], [ 2, ‘II’ ], [ 3, ‘III’ ], [ 4, ‘IV’ ], [ 5, ‘V’ ] ]
1
2
3
4
5
6
7
8
9
WeakMap
鍵不能是基本資料型別的值,並且在對原始物件的引用被刪除時,垃圾回收會自動刪除所有死條目。
// 記憶體洩漏
let array5 = [1, ‘I’];
let array6 = [2, ‘II’];
strong1 = new Map().set(array5).set(array6); // 建立對映,新增陣列。
console.log(strong1.has(array5));
array5 = null;
array6 = null;
array7 = […strong1][0];
array8 = […strong1][1];
console.log(array7);// [ [ 1, ‘I’ ], undefined ]
console.log(array8);// [ [ 2, ‘II’ ], undefined ]
let array9 = [1, ‘I’];
let array10 = [2, ‘II’];
weak1 = new WeakMap().set(array9).set(array10); // 建立對映,新增陣列。
console.log(weak1.has(array9));
array9 = null;
array10 = null;
array11 = […Weak1][0];
array12 = […Weak1][1];
console.log(array11);
console.log(array12);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
總結
資料型別
基礎型別:String Number Boolean Symbol undefined null。
引用型別:Object/Function。
物件
建立物件的兩種方式
構造器
let oStudent = new Object();
1
物件字面量
let oStudent = {
name: ‘xaaaa’,
age: 21
};
oStudent.name // 引用屬性
1
2
3
4
5
Array
1.建立陣列的兩種方式
構造器
const oArray = new Array();
1
陣列字面量
let person1 = {};
1
2.初始化
逐個賦值
const heroes = [];
heroes[0] = ‘蝙蝠俠’;
heroes[1] = ‘神奇女俠’;
1
2
3
陣列字面量
const avengers = [‘美國隊長’,‘鋼鐵俠’,‘雷神’,‘綠巨人’];
1
3.刪除陣列元素
delete avengers[0];
1
4.解構陣列
const [a,b,c] = [1,2,3];
console.log(a=${a},b=${b},c=${c}
);
1
2
5.陣列的屬性和方法
length屬性:陣列的長度。
console.log(avengers.length);
1
pop()方法:刪掉陣列中最後一個元素。
console.log(avengers.pop());
1
push()方法:將新值新增到陣列的末尾。
avengers.push(‘蝙蝠俠’);
1
shift()方法:刪除陣列中的第一個元素。
avengers.shift();
1
unshift()方法:將新值新增到陣列的開頭。
avengers.unshift(‘小超人’);
1
concat()方法:陣列合並。
const oArray = avengers.concat(heroes);
// 擴充套件運算子
const oArray = […avengers,…heroes];
1
2
3
join()方法:陣列變成組合了陣列所有元素的字串。
const a = avengers.join(&
);
1
slice()方法:從原始陣列中切掉一片,從而建立一個子陣列。
const b = avengers.slice(2,3);
1
splice()方法:從一個陣列中刪除元素,然後將新元素插入在被刪除的元素的位置上。
const cc = avengers.splice(2,2,‘liwanling’,‘li’);
1
reverse()方法:反轉陣列中元素的次序(永久性改變)。
const e = d.reverse();
1
sort()方法:對陣列中的元素按字母順序進行排序(永久性改變)。
const g = f.sort();
1
indexOf():檢測陣列中是否包含一個特定值,如果找到了,就返回該值在陣列中第一次出現的索引號,否則,就返回-1。
const avengers = [‘美國隊長’,‘鋼鐵俠’,‘雷神’,‘綠巨人’];
const a1 = avengers.indexOf(‘美國隊長1’);
console.log(a1);// 0
1
2
3
includes():檢測陣列中是否包含特定值,如果找到了,就返回true,否則就返回false。
const a2 = avengers.includes(‘美國隊長2’);
1
Set:沒有重複值
1.建立Set
構造器
let oSet = new Set();
1
2.新增元素
oSet.add(1).add(2)
1
3.Set的屬性和方法
size屬性:獲取集合中值的數目。
console.log(list4.size);
1
has()方法:用於檢測一個值是否在集合中,該方法會返回true或者false。
console.log(list4.has(‘brown’));
1
delete()方法:從集合中刪除一個值。
list4.delete(‘the’);
1
clear():刪掉集合中的所有值。
list4.clear();
1
4.Set和陣列的轉換:擴充套件運算子 Array.from()方法
const oArray = […list4];
const oArray = Array.from(list4);
1
2
3
let oSet = new Set([1,2,3]); // 陣列 迭代物件
1
5.WeakSet
const weak = new WeakSet().add(array1).add(array2);
console.log(weak);
array1 = null;
array2 = null;
const array3 = […weak][0];
const array4 = […weak][1];
1
2
3
4
5
6
Map
1.建立Map
const romanNumerals = new Map();
1
2.方法和屬性
size屬性:獲取鍵和值的數量。
console.log(romanNumerals.size);
1
get(key):通過鍵獲取值。
console.log(romanNumerals.get(3));
1
has(key):檢測一個特定鍵是否在對映中。
console.log(romanNumerals.has(5));
1
delete(key):從對映中刪除一個鍵值對。
romanNumerals.delete(5);
1
clear():從對映中刪除所有鍵值對。
console.log(romanNumerals);
1
3.Map轉換為陣列:擴充套件運算子 Array.from() 方法
const oArray1 = […romanNumerals];
const oArray2 = Array.from(romanNumerals);
1
2
4.WeakMap
// 記憶體洩漏
strong1 = new Map().set(array5).set(array6); // 建立對映,新增陣列。
weak1 = new WeakMap().set(array9).set(array10); // 建立對映,新增陣列。
相關文章
- 2-44鍾靜雯_day02
- 2-44鍾靜雯_day10
- 2-44鍾靜雯_day08
- 2-44鍾靜雯_day11
- Day03
- day03 字串字串
- Day03 陣列陣列
- Javaweb——(day03)jQueryJavaWebjQuery
- Java 初學 day03Java
- day03 流程控制
- JAVA學習day03Java
- 嵌入式day03
- [Java筆記]day03Java筆記
- day03 zookeeper筆記筆記
- 多執行緒Day03執行緒
- 學習日報 day03
- GNSS鍾跳探測
- 王者榮耀鍾馗技能怎麼用?王者榮耀鍾馗連招怎麼連呢?
- 王者榮耀鍾馗閃現技能怎麼用?王者榮耀鍾馗技能的玩法技巧
- MySQL 行轉列詳情鍾萼MySql
- python實現記時器(番茄鍾)Python
- 自學老男孩pyhton-day02,day03
- Day03:檔案開啟;錯誤處理
- ECS進階Day03:SLB負載均衡實踐負載
- 傳智黑馬python基礎學習——day03Python
- L1-059 敲笨鍾 分數 20
- 最新研究怎樣才算一見鍾情?
- 常用Python編輯器,你鍾愛哪一個?Python
- 定弘法師(鍾茂森博士)的九大願
- 何雯娜退出我家那閨女原因 我家那閨女郭躍參加KO
- vue大型電商專案尚品彙(後臺篇)day03Vue
- Morning Consult:Z世代最鍾愛的品牌排行榜
- RabbitMQ實戰教程-鍾林森-專題視訊課程MQ
- 靜態域與靜態方法
- 構建RAG應用-day03: Chroma入門 本地embedding 智譜embedding
- 靜態
- net 靜態方法與非靜態方法
- L1-088 靜靜的推薦