JS篇-基本型別和引用型別、typeof

徐海東發表於2019-02-14

1.typeof返回的七種型別

typeof一共會返回七種型別:number, boolean, string, undefined, object, function.

還有一種是ES6新增的symbol。

typeof只能區別基本型別,而不能區分引用型別

var log = console.log.bind(console)
複製程式碼

  • number型別

log(typeof 0)    // number
log(typeof NaN) // number  NaN在javaScript裡面代表的是特殊非數字值,本身是一個數字型別
複製程式碼

  • boolean型別

log(typeof true) // boolean
log(typeof false) // boolean複製程式碼

  • string型別

log(typeof '') // string
log(typeof 'str') // string複製程式碼

  • undefined型別

log(typeof undefined) // undefined
log(typeof a) // undefined 判斷未定義的變數或者是定義了變數未賦值複製程式碼

  • function型別

var fn = function () { ... }
function fn2() { .... }
log(typeof fn) // function
log(typeof fn2) // function
log(typeof Array) // function
log(typeof Date) // function複製程式碼

  • object型別(陣列,物件,null等等)

var obj = {
    ...
}
var arr = []
log(typeof arr) // arr
log(typeof obj) // object
log(typeof null) // object
log(typeof window) // object複製程式碼

2.什麼是基本型別和引用型別

基本型別就是指Number、Boolean、String、undefined、null

引用型別指Object、Function

區別:基本型別沒有屬性與方法,而引用型別有;基本型別的資料是存放在棧記憶體中,而引用型別的資料是存放在堆中;

個人理解:基本型別相當於現金,可以直接使用,而引用型別是存摺,要用還要去銀行取。

複製變數

基本型別的值改變互不影響
var a = 1
var b = a
log(a) // 1
log(b)	// 1
a = 2
log(a) // 2
log(b) // 1
複製程式碼

var a = 1
var b = a
log(a) // 1
log(b)	// 1
b = 3
log(a) // 1
log(b) // 3複製程式碼

基本型別的變數複製是在棧記憶體新建一個空間儲存值,如果一個值改變,不會影響到其他

JS篇-基本型別和引用型別、typeof

引用型別的複製跟基本型別的複製不一樣

var obj1 = new Object()
var obj2 = obj1複製程式碼

JS篇-基本型別和引用型別、typeof

定義物件是在堆記憶體裡面定義了一個指標,該指標指向了堆記憶體裡面物件的儲存地址,

複製物件的過程實際是把物件的地址複製給另一個物件,兩個指標指向同一個地址,一個物件改變,另一個也會被改變

var obj = new Object()
var obj2 = obj
log(obj)  // {}
log(obj2)  // {}

obj.a = 2
log(obj)  // {a: 2}
log(obj2) // {a: 2}
複製程式碼


相關文章