1. 程式人生 > >JavaScript基礎總結深入(資料型別、資料_變數_記憶體、物件、函式、回撥函式、this)

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. 屬性名包含特殊字元: - 空格
  2. 屬性名不確定

函式

1、什麼是函式

函式是實現特定功能的n條語句的封裝提,只有函式是可以執行的,其他型別的資料不能執行

2、為什麼要用函式

使用函式可以提高程式碼的複用,更便於閱讀交流

3、如何定義函式

a) 函式宣告 b) 表示式

function fn1 () {  //函式宣告
    console.log('fn1()')
  }
  var fn2 = function () {  //表示式
    console.log('fn2()')
  }
  fn1()
  fn2()

回撥函式

  1. 什麼函式才是回撥函式? a). 你定義的 b). 你沒有調 c). 但最終它執行了(在某個時刻或某個條件下)
  2. 常見的回撥函式? a) dom事件回撥函式 ==>發生事件的dom元素
 document.getElementById('btn').onclick = function () { // dom事件回撥函式
    alert(this.innerHTML)
  }

b) 定時器回撥函式 ===>window

setTimeout(function () { // 定時器回撥函式
    alert('你點我幹嘛'+this)
  }, 2000)

函式中的this

  1. this是什麼? a) 任何函式本質上都是通過某個物件來呼叫的,如果沒有直接指定就是window b) 所有函式內部都有一個變數this c) 它的值是呼叫函式的當前物件
  2. 如何確定this的值?
  • test(): window
  • p.test(): p
  • new test(): 新建立的物件
  • p.call(obj): obj