基本數(shù)據(jù)類型:
- String
- Number
- Boolean
- Undefined
- Null
- Symbol
- BigInt
對(duì)象類型
- Object:任意對(duì)象
- Array: 一種特別的對(duì)象(擁有數(shù)值下表院仿,內(nèi)部數(shù)據(jù)是有序的)
- Function: 一種特別的對(duì)象(可以執(zhí)行)
判斷數(shù)據(jù)類型的方法
- typeof
- 返回?cái)?shù)據(jù)類型的字符串表達(dá)式(全小寫(xiě))
- 無(wú)法區(qū)分object和null岔帽,object和array(都返回object)
- instanceof
- 判斷對(duì)象的具體類型
- 用來(lái)判斷A是否為B的實(shí)例焚碌,表達(dá)式為:
A instanceof B
,如果A是B的實(shí)例痕囱,則返回true,否則返回false。instanceof檢測(cè)的是原型勋锤,內(nèi)部機(jī)制是通過(guò)判斷對(duì)象的原型鏈中是否有類型的原型
- ===
可以判斷undefined粱侣,null
- Object.prototype.toString()
Object.prototype.toString.call('') //[object String]
最準(zhǔn)確的判斷方法
- constructor
- 當(dāng)一個(gè)函數(shù)F被定義時(shí)羊壹,JS引擎會(huì)為F添加prototype原型,然后在prototype上添加一個(gè)constructor屬性齐婴,并讓其指向F的引用油猫,F(xiàn)利用原型對(duì)象的constructor屬性引用了自身,當(dāng)F作為構(gòu)造函數(shù)創(chuàng)建對(duì)象時(shí)柠偶,原型上的constructor屬性被遺傳到了新創(chuàng)建的對(duì)象上情妖,從原型鏈角度講睬关,構(gòu)造函數(shù)F就是新對(duì)象的類型。這樣做的意義是毡证,讓對(duì)象誕生以后电爹,就具有可追溯的數(shù)據(jù)類型
''.constructor == String //true
undefined和null的區(qū)別?
- undefined代表定義未賦值
- null定義并賦值了料睛,只是值為null
什么時(shí)候給變量賦值為null丐箩?
- 初始賦值,表明將要賦值為對(duì)象
- 結(jié)束前恤煞,讓對(duì)象成為垃圾對(duì)象(被垃圾回收器回收)
嚴(yán)格區(qū)別變量類型和數(shù)據(jù)類型雏蛮?
- 數(shù)據(jù)的類型
- 變量的類型(變量?jī)?nèi)存值的類型)
- 基本類型:保存的就是基本類型的數(shù)據(jù)
- 引用類型:保存的是地址值
數(shù)據(jù)的特點(diǎn)
內(nèi)存中所有操作的目標(biāo):數(shù)據(jù)
- 算術(shù)運(yùn)算
- 邏輯運(yùn)算
- 賦值
- 運(yùn)行函數(shù)
什么是內(nèi)存?
- 內(nèi)存條通電猴產(chǎn)生的可儲(chǔ)存數(shù)據(jù)的空間(臨時(shí)的)
- 內(nèi)存產(chǎn)生和死亡:內(nèi)存條(電路板)->通電->產(chǎn)生內(nèi)存空間->存儲(chǔ)數(shù)據(jù)->處理數(shù)據(jù)->斷電->內(nèi)存空間和數(shù)據(jù)消失
- 一塊小內(nèi)存的2個(gè)數(shù)據(jù)
- 內(nèi)部存儲(chǔ)的數(shù)據(jù)
- 地址值
- 內(nèi)存分類
什么是變量
- 可變化的量阱州,由變量名和變量值組成
- 每個(gè)變量都對(duì)應(yīng)的一塊小內(nèi)存挑秉,變量名用來(lái)查找對(duì)應(yīng)的內(nèi)存,變量值就是內(nèi)存中保存的數(shù)據(jù)
內(nèi)存苔货,數(shù)據(jù)犀概,變量三者之間的關(guān)系
- 內(nèi)存用來(lái)存儲(chǔ)數(shù)據(jù)的空間
- 變量是內(nèi)存的標(biāo)識(shí)
var a = xxx,a內(nèi)存中到底保存的是什么夜惭?
- xxx是基本數(shù)據(jù)姻灶,保存的就是這個(gè)數(shù)據(jù)
- xxx是對(duì)象,保存的是對(duì)象的地址值
- xxx是一個(gè)變量诈茧,保存的xxx的內(nèi)存內(nèi)容(可能是基本數(shù)據(jù)产喉,也可能是地址值)
var a = {age: 12}
var b = a
a = {name: 'Bob',age: 13}
b.age = 14
console.log(b.age,a.name,a.age) // 14 Bob 13
a = {name: 'Bob',age: 13}
function fn(obj) {
obj = {age: 15}
}
fn(a)
console.log(a.age) //13
//因?yàn)閯傞_(kāi)始a指向{age:13}的內(nèi)存空間,在fn函數(shù)中敢会,obj被賦值a曾沈,故它一開(kāi)始也指向了{(lán)age:13}的內(nèi)存空間,但后面又重新定義了obj鸥昏, obj = {age: 15}塞俱,此時(shí)obj不再指向{age:13},而是指向{age: 15}±艨澹現(xiàn)在obj和a指向的不是同一塊內(nèi)存空間
在js調(diào)用函數(shù)時(shí)傳遞變量參數(shù)時(shí)障涯,是值傳遞還是引用傳遞?
js引擎如何管理內(nèi)存膳汪?
- 內(nèi)存生命周期
- 分配小內(nèi)存空間唯蝶,得到它的使用權(quán)
- 存儲(chǔ)數(shù)據(jù),可以反復(fù)進(jìn)行操作
- 釋放小內(nèi)存空間
- 釋放內(nèi)存
- 局部變量:函數(shù)執(zhí)行完自動(dòng)釋放
- 對(duì)象:成為垃圾對(duì)象->垃圾回收器回收
什么是對(duì)象
- 多個(gè)數(shù)據(jù)的封裝體
- 用來(lái)保存多個(gè)數(shù)據(jù)的容器
- 一個(gè)對(duì)象代表現(xiàn)實(shí)中的一個(gè)事物
為什么要用對(duì)象遗嗽?
- 統(tǒng)一管理多個(gè)數(shù)據(jù)
對(duì)象的組成
- 屬性:屬性名(字符串)和屬性值(任意)組成
- 方法:一種特別的屬性(屬性值是函數(shù))
什么時(shí)候必須使用['屬性名']的方式粘我?
什么是函數(shù)
- 實(shí)現(xiàn)特定功能的n條語(yǔ)句的封裝體
- 只有函數(shù)是可以執(zhí)行的,其它類型的數(shù)據(jù)不能執(zhí)行
為什么要用函數(shù)
如何調(diào)用(執(zhí)行)函數(shù)
- test():直接調(diào)用
- obj.test():通過(guò)對(duì)象調(diào)用
- new test():new調(diào)用
- test.call/apply(obj):臨時(shí)讓test成為obj的方法進(jìn)行調(diào)用
什么是回調(diào)函數(shù)
- 自己定義的且沒(méi)有調(diào)用但最終該函數(shù)執(zhí)行了
常見(jiàn)的回調(diào)函數(shù)
document.getElementById('btn').onclick = function() {
...
}
- 定時(shí)器回調(diào)函數(shù)
- ajax請(qǐng)求回調(diào)函數(shù)
- 生命周期回調(diào)函數(shù)
this是什么媳谁?
- 任何函數(shù)本質(zhì)上都是通過(guò)某個(gè)對(duì)象來(lái)調(diào)用的涂滴,如果沒(méi)有直接指定就是window
- 所有函數(shù)內(nèi)部都有一個(gè)變量this
- 它的值是調(diào)用函數(shù)的當(dāng)前對(duì)象
如何確定this?
- test(): window
- p.test(): p
- new test(): 新創(chuàng)建的對(duì)象(該構(gòu)造函數(shù)創(chuàng)建出來(lái)的實(shí)例對(duì)象)
- p.call(obj): obj
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者