###JS 資料型別總結 JavaScript共有七種資料型別,包括六種基本資料型別(number、string、boolean、null、undefined、symbol)和一種複雜資料型別(物件型別)。
1、number(數字型別)
number型別即數字型別,數字可以帶小數點也可以不帶,也可以通過科學計數法來寫。
var y=123e5; // 12300000
var z=123e-5; // 0.00123
複製程式碼
js有一個精度問題坑:
var a = 0.1;
var b = 0.2;
console.log(a+b))//0.30000000000000004
複製程式碼
本來0.1+0.2應該等於0.3可控制檯列印的卻是0.30000000000000004,這是因為js採取了雙精度儲存。小數前端一般的解決方法是先擴大倍數相加後再除以倍數:
(0.1*10 + 0.2*10) / 10 == 0.3
複製程式碼
2、string(字串型別)
字串型別可以是引號中的任意文字,可使用單引號或雙引號。
var str = 'hello'
複製程式碼
3、boolean(布林型別)
布林型別有兩種值 true或false,常用於判斷中。
4、null
null型別通常是一個變數或函式未宣告導致的,null型別也有一個bug是:
console.log(typeof null) //object
複製程式碼
這也是js一直都存在的bug,注意就好。
5、undefind
undefind通常是一個變數已經宣告,但並未賦值導致的。
var a ;
console.log(a)//undefined
複製程式碼
6、symbol
symbol是ES6新增的,表示獨一無二的值,由Symbol()函式生成。
console.log(Symbol('a') === Symbol('a'));//false
複製程式碼
7、物件型別
複雜資料型別跟前六種簡單資料型別相比,不同在於簡單資料型別變數中儲存的直接是變數所在的地址,而複雜資料型別儲存的是指標。所以就出現了深淺拷貝的問題。關於深淺拷貝的問題,我會專門再寫一篇文章去介紹。
var people = {
name: '小明'
}
var peoplea = people;
peoplea.name = '小白';
console.log(peoplea.name)//小白
console.log(people.name)//小白
複製程式碼
我們本來期望只改變peoplea的name,現在連people的name都改變了,這就是複雜型別儲存的是指標導致的。