javascript
JavaScript高级day01-AM【WebStrom安装、数据类型分类及判断、数据-内存-变量、引用变量赋值、对象的组成】
筆記、視頻、源碼:JavaScript(基礎、高級)筆記匯總表【尚硅谷JavaScript全套教程完整版】
目? ?錄
P1?01.尚硅谷_JS高級_準備?07:07
WebStrom 下載及安裝
1、WebStorm 卸載
2、WebStrom 下載(官網)
3、WebStrom 下載(百度網盤)
JS高級 Xmind 思維導圖
WebStorm 導入文件
P2?02.尚硅谷_JS高級_數據類型?40:43
數據類型 分類
數據類型 判斷
P3?03.尚硅谷_JS高級_相關問題?20:31
實例
1. undefined與null的區別?
2. 什么時候給變量賦值為null呢?
3. 嚴格區別變量類型與數據類型?
P4?04.尚硅谷_JS高級_數據_變量_內存?47:39
1. 什么是數據?
2. 什么是內存?
3. 什么是變量?
4. 內存、數據、變量三者之間的關系。
P5?05.尚硅谷_JS高級_相關問題1?24:22
情況討論:var a = xxx(賦值操作),a內存中到底保存的是什么?
關于引用變量賦值問題
P6?06.尚硅谷_JS高級_相關問題2?25:38
關于引用變量賦值問題
關于數據傳遞問題
內存管理
P1?01.尚硅谷_JS高級_準備?07:07
WebStrom 下載及安裝
嗶哩嗶哩網站 視頻:【分享】WebStorm2020.1安裝教程-Windows篇
1、WebStorm 卸載
??
2、WebStrom 下載(官網)
下載鏈接
3、WebStrom 下載(百度網盤)
- 【鏈接:https://pan.baidu.com/s/1-iVrlbLbvx8MX4UZT5lIeA? ?提取碼:zjxs】
??
??
??
??
????
??
??
??
??
??
??
JS高級 Xmind 思維導圖
WebStorm 導入文件
??
P2?02.尚硅谷_JS高級_數據類型?40:43
數據類型 分類
基本(值)類型
對象(引用)類型
數據類型 判斷
typeof
instanceof
===
===?可以判斷:undefined和null。默認值唯一 ---> undefined:undefined;null:null。
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>01_數據類型</title> </head> <body> <script type="text/javascript">var b1 = { // 對象類型b2: [1, 'abc', console.log],b3: function () {console.log('b3')return function () {return 'xfzhang'}}}console.log(b1 instanceof Object, b1 instanceof Array) // true falseconsole.log(b1.b2 instanceof Array, b1.b2 instanceof Object) // true trueconsole.log(b1.b3 instanceof Function, b1.b3 instanceof Object) // true trueconsole.log(typeof b1.b3 === 'function') // trueconsole.log(typeof b1.b2[2] === 'function') // trueb1.b2[2](4) // 4console.log(b1.b3()()) // xfzhangconsole.log(typeof Array) // functionconsole.log(typeof b1.b2) // objectconsole.log(typeof b1.b2[2]) // functionconsole.log("---")console.log(b1.b2[2](4)) // 4 undefinedconsole.log("--- ---")console.log(b1.b2[2]) // ? log() { [native code] }console.log("--- --- --- ---")console.log(b1.b2[2]('abc')) // 'abc' undefinedconsole.log("--- --- ---")console.log(b1.b3()) // b3 ? (){ return 'xfzhang' } </script> </body> </html>P3?03.尚硅谷_JS高級_相關問題?20:31
實例
使用同一個構造函數創建的對象,我們稱為一類對象,也將一個構造函數稱為一個類。我們將通過一個構造函數創建的對象,稱為是該類的實例。
1. undefined與null的區別?
1. undefined與null的區別?
undefined代表定義未賦值;null定義并賦值,只是值為null。
2. 什么時候給變量賦值為null呢?
2. 什么時候給變量賦值為null呢?
初始賦值,表明將要賦值為對象;結束前,讓對象成為垃圾對象(被垃圾回收器回收)。初始化賦值:將要作為引用變量使用, 但對象還沒有確定。結束時:將變量指向的對象成為垃圾對象。
var a = null // a將指向一個對象,但對象此時還沒有確定
a = null // 讓a指向的對象成為垃圾對象
??
3. 嚴格區別變量類型與數據類型?
3. 嚴格區別變量類型與數據類型?
js的變量本身是沒有類型的,變量的類型實際上是變量內存中數據的類型(js是弱類型的語言)。var a; 判斷變量類型,實際上 是判斷值的類型。
數據的類型(數據對象):
? ? * 基本類型
? ? * 對象類型
變量的類型(變量內存值的類型):
? ? * 基本類型:保存基本類型的數據(保存基本類型數據的變量)。
? ? * 引用類型:保存對象地址值(保存對象地址值的變量)。
P4?04.尚硅谷_JS高級_數據_變量_內存?47:39
1. 什么是數據?
存儲于內存中代表特定信息的'東東',本質就是0101(二進制)...
數據的特點:具有可讀、可傳遞、可運算的基本特性。
萬物(一切)皆數據,函數也是數據。
內存(程序)中所有操作的目標: 數據
?* 算術運算
?* 邏輯運算
?* 賦值
?* 運行函數(調用函數傳參)
...
2. 什么是內存?
內存條通電后產生的可存儲數據的空間(臨時的)。
內存產生和死亡: 內存條(集成電路板)==>通電==>產生一定容量的存儲(內存)空間==>存儲各種數據==>處理數據==>斷電==>內存和數據全部消失
內存的空間是臨時的, 而硬盤的空間是持久的
一塊內存包含2個數據
?* 內部存儲的數據(一般數據/地址數據)
?* 內存地址值數據
內存分類
?* 棧: 全局變量/局部變量 (空間較小)
?* 堆: 對象 (空間較大)
3. 什么是變量?
值可以變化的量,由變量名與變量值組成。
一個變量對應一塊小內存,變量名用來查找對應的內存,變量值就是內存中保存的內容。
4. 內存、數據、變量三者之間的關系。
內存是一個容器,用來存儲程序運行需要操作的數據(內存是用來存儲數據的空間)。
變量是內存的標識,我們通過變量找到對應的內存,進而操作(讀/寫)內存中的數據。
P5?05.尚硅谷_JS高級_相關問題1?24:22
情況討論:var a = xxx(賦值操作),a內存中到底保存的是什么?
問題:var a = xxx(賦值操作),a內存中到底保存的是什么?
關于引用變量賦值問題
關于引用變量賦值問題
- 2個引用變量指向同一個對象(保存的內容是同一個對象的地址值),通過一個引用變量修改對象內部數據,另一個引用變量也看得見(看見的是修改之后的數據)。
- 2個引用變量指向同一個對象,讓一個引用變量指向另一個對象,另一個引用變量還是指向原來的對象。
此圖,針對第1條解釋。
此圖,針對第2條解釋。
<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><title>02_關于引用變量賦值問題</title></head><body><script type="text/javascript">//1. 2個引用變量指向同一個對象, 通過一個引用變量修改對象內部數據, 另一個引用變量也看得見var obj1 = {}var obj2 = obj1obj2.name = 'Tom'console.log(obj1.name) // Tomfunction f1(obj) {obj.age = 12}f1(obj2)console.log(obj1.age) // 12//2. 2個引用變量指向同一個對象,讓一個引用變量指向另一個對象, 另一個引用變量還是指向原來的對象var obj3 = {name: 'Tom'}var obj4 = obj3obj3 = {name: 'JACK'}console.log(obj4.name) // Tomfunction f2(obj) {obj = {name: 'Bob'}}f2(obj4)console.log(obj4.name) // Tomvar a = {age: 12}; // 2個引用變量指向同一個對象var b = a; // 2個引用變量指向同一個對象a = {name: 'Bob', age: 13}; // 將新的對象賦值給ab.age = 14; // 另一個引用變量還是指向原來的對象console.log(b.age, a.name, a.age); // 14 "Bob" 13function fn2 (obj) {obj = {age: 15}; // 新的對象(垃圾對象)}fn2(a); // 函數執行完,函數內部的局部變量(obj)會自動釋放//總結:obj引用的地址值發生改變,不再引用傳進來的形參地址,并且函數作用域的原因,這個對象只能在函數內使用。console.log(a.age); // 13</script></body> </html>P6?06.尚硅谷_JS高級_相關問題2?25:38
關于引用變量賦值問題
obj和a存的堆地址相同,下一步賦值obj的堆地址改變了,但是他并沒有改變之前a里存的堆地址的內容。
就是把a的內容拷貝一份到函數參數obj上,但函數內部obj指向了新對象,但不影響a指向的對象。
函數形參傳進去之后,復制a的值給obj,這兩個棧內存指向一個堆內存的數據。之后obj={age:15},這時:obj指向另一個堆內存,這兩個堆內存不一樣了,再用obj修改age也不會影響到a指向的age。
關于數據傳遞問題
問題:在js調用函數時傳遞變量參數時,是值傳遞還是引用傳遞?
- 理解1:都是值(基本/地址值)傳遞。
- 理解2:可能是值傳遞,也可能是引用傳遞(地址值)。
- 只有值傳遞,沒有引用傳遞,傳遞的都是變量的值,只是這個值可能是基本數據,也可能是地址(引用)數據。
- 如果后一種看成是引用傳遞,那就值傳遞和引用傳遞都可以有。
因為函數里的a是函數內的局部變量,換成this.a = a + 1,這時候this.a就是你最開始定義的a。
假設形參是x,調用函數傳參時,發生了兩件事:1、讀取全局變量a的值;2、將值賦值給x ,然后執行函數內代碼。
括號里的a是全局里的a的值copy給他的。
內存管理
問題:JS引擎如何管理內存?
1. 內存生命周期
2. 釋放內存
????
var a = 3; var obj = {}; // 占用3個空間,2個棧區一個堆區:a = 3、obj、{}(對象占用空間最大)。
obj = null; // 占用2個空間,{}占用的空間被回收。
obj等于任意值,與堆的連接就取消了,所以堆的那塊成了垃圾,而棧這邊的obj還是等于任意值,全局變量obj并沒有釋放。
總結
以上是生活随笔為你收集整理的JavaScript高级day01-AM【WebStrom安装、数据类型分类及判断、数据-内存-变量、引用变量赋值、对象的组成】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JavaScript基础15-day17
- 下一篇: JavaScript高级day01-PM