JavaScript共有七種數據類型,包括六種基本數據類型(number、string、boolean、null、undefined、symbol)和一種引用類型。javascript
number類型即數字類型,數字能夠帶小數點也能夠不帶,也能夠經過科學計數法來寫。前端
var y=123e5; // 12300000
var z=123e-5; // 0.00123
複製代碼
js有一個精度問題坑:java
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
複製代碼
字符串類型能夠是引號中的任意文本,可以使用單引號或雙引號。ui
var str = 'hello'
複製代碼
布爾類型有兩種值 true或false,經常使用於判斷中。spa
null類型一般是一個變量或函數未聲明致使的,null類型也有一個bug是:指針
console.log(typeof null) //object
複製代碼
這也是js一直都存在的bug,注意就好。code
undefind一般是一個變量已經聲明,但並未賦值致使的。ip
var a ;
console.log(a)//undefined
複製代碼
symbol是ES6新增的,表示獨一無二的值,由Symbol()函數生成。字符串
console.log(Symbol('a') === Symbol('a'));//false
複製代碼
引用類型跟前六種簡單數據類型相比,不一樣在於簡單數據類型存儲的直接是值,而引用類型存儲的是地址(指針)。因此就出現了下邊的問題。
var people = {
name: '小明'
}
var peoplea = people;
peoplea.name = '小白';
console.log(peoplea.name)//小白
console.log(people.name)//小白
複製代碼
咱們原本指望只改變peoplea的name,如今連people的name都改變了,這是複雜類型存儲的是指針致使的。能夠用深淺拷貝來解決。關於深淺拷貝的問題,我會專門再寫一篇文章去介紹。