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