JavaScript基礎總結深入(資料型別、資料_變數_記憶體、物件、函式、回撥函式、this)
資料型別
1、分類
JavaScript 資料型別分為兩大類,分別為:基本型別,又稱為值型別;物件型別,又稱為引用型別。
基本(值)型別
String:任意字元 Number:任意的數字 boolean: true/false undefined: undefined null: null
物件(引用)型別
Object:任意物件 Fuction:一種特別的物件(可以執行) Array:一種特別的物件(數值下表,內部的資料是有序的)
2、判斷
typeof
可以判斷:undefined、數值、字串、布林值。 function 不能判斷:null與object,object與array。
instanceof
判斷物件的具體型別
===
資料_變數_記憶體
1、什麼是資料
a) 儲存在記憶體中代表特定資訊的稱為資料 b) 資料的特點:可傳遞,可運算 c) 記憶體中所有操作的目標:資料
2、什麼是記憶體
a) 記憶體條通電後產生的可儲存資料的空間(臨時的) b) 記憶體的產生和死亡:記憶體條(電路版)>通電>產生記憶體空間==>儲存資料==>處理資料==>斷電==>記憶體空間和資料都消失 c) 一塊小記憶體的2個數據: * 內部儲存的資料 * 地址值 d)記憶體分類: * 棧: 全域性變數/區域性變數 * 堆: 物件
3、什麼是變數
a) 可變化的量,由變數名和變數值組成 b) 每個變數都對應一塊小記憶體,變數名用來查詢對應的記憶體,變數是就是記憶體中儲存的資料
4、記憶體,資料,變數三者之間的關係
a) 記憶體用來儲存資料的空間 b) 變數是記憶體的標識 拓展 問題: var a = xxx, a記憶體中到底儲存的是什麼? * xxx是基本資料, 儲存的就是這個資料 * xxx是物件, 儲存的是物件的地址值 * xxx是一個變數, 儲存的xxx的記憶體內容(可能是基本資料, 也可能是地址值) 5、關於引用變數賦值問題 a) 2個引用變數指向同一個物件, 通過一個變數修改物件內部資料, 另一個變數看到的是修改之後的資料 b) 2個引用變數指向同一個物件, 讓其中一個引用變數指向另一個物件, 另一引用變數依然指向前一個物件
var obj1 = {name: 'Tom'} var obj2 = obj1 obj2.age = 12 console.log(obj1.age) // 結果為:12 function fn (obj) { obj.name = 'A' } fn(obj1) console.log(obj2.name) //A 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
物件
1、什麼是物件
物件是多個數據的封裝體,是用來儲存多個數據的容器,一個物件代表現實中的一個事物
2、為什麼要用物件
為了統一管理多個數據
3、物件的組成
a) 屬性:屬性名(字串)和屬性值(任意)組成 b) 方法:一種特別的屬性(屬性值是函式)
4、如何訪問物件內部資料
a) .屬性名: 編碼簡單, 有時不能用 b) [‘屬性名’]: 編碼麻煩, 能通用
var p = {
name: 'Tom',
age: 12,
setName: function (name) {
this.name = name
},
setAge: function (age) {
this.age = age
}
}
p.setName('Bob')
p['setAge'](23)
console.log(p.name, p['age'])
拓展 問題: 什麼時候必須使用[‘屬性名’]的方式?
- 屬性名包含特殊字元: - 空格
- 屬性名不確定
函式
1、什麼是函式
函式是實現特定功能的n條語句的封裝提,只有函式是可以執行的,其他型別的資料不能執行
2、為什麼要用函式
使用函式可以提高程式碼的複用,更便於閱讀交流
3、如何定義函式
a) 函式宣告 b) 表示式
function fn1 () { //函式宣告
console.log('fn1()')
}
var fn2 = function () { //表示式
console.log('fn2()')
}
fn1()
fn2()
回撥函式
- 什麼函式才是回撥函式? a). 你定義的 b). 你沒有調 c). 但最終它執行了(在某個時刻或某個條件下)
- 常見的回撥函式? a) dom事件回撥函式 ==>發生事件的dom元素
document.getElementById('btn').onclick = function () { // dom事件回撥函式
alert(this.innerHTML)
}
b) 定時器回撥函式 ===>window
setTimeout(function () { // 定時器回撥函式
alert('你點我幹嘛'+this)
}, 2000)
函式中的this
- this是什麼? a) 任何函式本質上都是通過某個物件來呼叫的,如果沒有直接指定就是window b) 所有函式內部都有一個變數this c) 它的值是呼叫函式的當前物件
- 如何確定this的值?
- test(): window
- p.test(): p
- new test(): 新建立的物件
- p.call(obj): obj