JavaScript高級

數據類型

JavaScript中數據類型分爲兩大類
基本數據類型(值類型)和引用數據類型(對象類型)
基本類型:

  • String :任意字符
  • Number:任意數字
  • boolean:true/false
  • undefined:undefined
  • null:null

對象(引用類型)

  • Object:任意對象(用來存數據的對象)
  • Function:一種特別對象(可以執行的對象)
  • Array:一種特別對象(有數值下標,有序)

注意:Object包括Function和Array。

判斷數據類型

  1. typeof:返回該數據的類型值的字符串表達,
  2. instanceof:翻譯是實例的意思,判斷是不是該構造函數的實例。主要用來判斷對象的具體類型(Array還是Function)
  3. ===:全等於,用來判斷等號兩邊的數據值和類型都一樣。返回true/false

數據類型的分類和判斷總結

  • 基本(值)類型
    • Number ----- 任意數值 -------- typeof
    • String ----- 任意字符串 ------ typeof
    • Boolean ---- true/false ----- typeof
    • undefined — undefined ----- typeof/===
    • null -------- null ---------- ===
  • 對象(引用)類型
    • Object ----- typeof/instanceof
    • Array ------ instanceof
    • Function ---- typeof

概念

實例:實例對象?
類型:類型對象?
舉例說明:

function  Person (name,age){//構造函數  類型對象
	this.name = name
	this.age = age
}
var p = new Person('tom',14)
Person('jack',12)

就比如上面的舉例,上面的Person方法是一個對象,因爲他是一個方法,var p也是一個對象,此時這個p就是實例對象,而這個Person方法是構造函數,p實例化了類型對象Person.而Person(‘jack’,12)就不是構造函數了。

1.undefined與null的區別?
undefined:定義未賦值,如var a—>爲undefined
null:定義並且賦值了,只不過賦值爲null
如:var a = null
2.什麼時候給變量賦值爲null?
(1)用來初始賦值,表明將要賦值爲對象。
如:var a = null
console.log(typeof a)—>Object,但是null是基本數據類型,但是返回的爲Object,爲什麼?因爲它人爲你寫的爲空是由於現在對象屬性,不確定。所以先爲空,等以後再賦值。
(2)結束前,讓對象成爲垃圾對象(被垃圾回收機制)
3.嚴格區別變量類型和數據類型?
我們知道數據類型分爲基本數據類型和對象類型,但是這針對的是數據,但像var a = 1,和var c = function(){}中,a是基本類型,而c是引用類型。
在這裏插入圖片描述

數據,變量, 內存的理解

數據:我理解的是 數據用數據類型來標識,基本分爲對象數據和基本數據。如var a = 3,這裏的數據指數字3.
在這裏插入圖片描述
變量:變量都放在內存中的棧空間裏。var a = 3,a被稱爲變量,a被稱爲基本類型變量,它存的是基本數據類型。var obj = {name:‘tom’},obj是引用變量,它指向的是內存中堆空間的一個對象,它只是指向,它實際存放的是堆空間中對象的地址。在這裏我們說的變量其實都不是我們要操作的數據。但是它們指向數據,我們依靠它來操作數據。

內存:
在這裏插入圖片描述

內存,數據, 變量三者之間的關係

  • 內存是容器, 用來存儲數據的空間
  • 變量是內存的標識, 通過變量我們可以操作(讀/寫)內存中的數據

實參與形參

var  a  = {name:"bob"}
function  fn2 (obj) {
	obj = {name:"tom"}
}
fn2(a)
console.log(a.name)//輸出bob

上面的代碼輸出a對象的name的值,依然是bob,書上的話說,形參不能改變實參。根本原因是fn2(obj)這個方法,把a傳進去時,它傳遞的是a變量的內容,a變量的內容是一個地址,這個地址指向的是{name:“bob”}對象。後來到方法裏面又重新給它賦值了一個對象的地址,所以a的值依然沒有改變。簡單可以理解爲fn2(obj=a)----》obj=a,fn2(obj).與a無關。
參數引用傳遞是值傳遞,傳遞的是變量a的值,即一個地址。這個地址指向的是{name:“bob”}對象。

舉例:

var  a = 3
function  fn(a){
	a = a +1
}
fn(a)
console.log(a)//3

上面的代碼輸出結果是3.
重點區分: a = 3 和 fn(a) 中的a不是一個變量。fn中的a可以是任何名字。

對象

什麼是對象?

  1. 多個數據的封裝體
  2. 用來保存多個數據容器
  3. 一個對象代表現實中的一個事務

爲什麼要用對象?
爲了統一管理多個數據
對象的組成

  • 屬性:屬性名(字符串)和屬性值(任意類型)組成
  • 方法:一種特殊的屬性(屬性值是函數)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章