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複製程式碼
基本型別的變數複製是在棧記憶體新建一個空間儲存值,如果一個值改變,不會影響到其他
引用型別的複製跟基本型別的複製不一樣
var obj1 = new Object()
var obj2 = obj1複製程式碼
定義物件是在堆記憶體裡面定義了一個指標,該指標指向了堆記憶體裡面物件的儲存地址,
複製物件的過程實際是把物件的地址複製給另一個物件,兩個指標指向同一個地址,一個物件改變,另一個也會被改變
var obj = new Object()
var obj2 = obj
log(obj) // {}
log(obj2) // {}
obj.a = 2
log(obj) // {a: 2}
log(obj2) // {a: 2}
複製程式碼