[TOC]
# JavaScript數據類型
分為 “**基本類型**” 和 “**引用類型**” 兩大類
## **六大基本數據類型**
1.**Number:數值類型**
2. **String:字符串類型**
3. **Symbol 類型**
4. **Boolean:布爾類型**
5. **Undefined:未定義類型**
6.**Null:空類型**
*****
## **獲取變量的類型**
1、typeof 用來獲取變量的數據類型
2、typeof 運算結果值是字符串類型
```
// typeof 變量名/值
console.log(typeof 123); //number
console.log(typeof '123'); //string
console.log(typeof true); //boolean
console.log(typeof undefined); //undefined
console.log(typeof null); //object,對象
var str = typeof 123;
console.log(typeof str);//string
// 注意:typeof 或去到的null的類型是Object
```
<br>
<br>
## **數據類型轉換**
<br>
### **轉換為字符串類型**
#### **toString()方法**
```
//方式一:toString()
var age = 18;
console.log(age.toString());
console.log(true.toString());
console.log(undefined.toString());
//報錯信息:Cannot read property 'toString' of undefined;
翻譯:無法讀取未定義的屬性“toString”
```
<br>
#### **String()函數**
  有了toString()函數,為什么還要有String()函數?
  某些類型沒有toString()函數,這個時候可以使用String()。例如:undefined和null,可以寫成String(undefined)和String(null)。
```
console.log(String(undefined));
console.log(String(null));
```
<br>
#### **拼接字符串(掌握)**
```
console.log(123 + '');
console.log(true + '');
console.log(undefined + '');
console.log(null + '');
```
  num + " " 的形式,當 "+" 號一邊的操作符是字符串類型,另一邊的操作符是其它類型的時候,會先把其它類型轉換成字符串再進行字符串拼接,最后返回字符串。
>[info]注意:
1、toString()方法只能將數值類型和布爾類型轉換成字符串類型,不能將Undefined和Null類型轉成字符串類型;
2、String()函數能將所有基本類型轉成字符串類型;
3、函數和方法的區別:方法需要調用者才能調用,函數不需要調用者;
  以上三種數據類型轉換,以后開發中會常用到toString方式。
<br>
### **轉換成數值類型**
  其他類型轉成數值類型的時候,存在有兩種可能的值,一種是數字,一種是NaN(NaN也是Number類型!)。轉換成功時,結果為數字,轉成失敗時,結果為NaN。
<br>
#### **Number()函數**
  Number()可以把任意值轉換成數值類型,在轉換字符串的時候,如果字符串中存在一個非數字字符,轉換結果為 NaN。
```
console.log(Number('123'));// 123
console.log(Number('123aaa'));// NaN: Not a Number
console.log(Number(true));// 1
console.log(Number(flase));// 0
console.log(Number(undefined));// NaN
console.log(Number(null));// 0
```
<br>
#### **parseInt()函數**
  如果第一個字符是數字或運算符號,那么就開始解析,直到遇到非數字字符,停止解析并得到解析結果;如果第一個字符是非數字且非運算符號,則不解析并得到結果 NaN。
```
console.log(parseInt(str)); //123 number
var str1 = '123aaa'; //123 number
var str2 = 'aaa123'; //NaN
var str3 = '12.3aaa';
console.log(parseInt(str3)); //12
console.log(parseInt(bool)); //NaN
console.log(parseInt(u)); //NaN
console.log(parseInt(nu)); //NaN
```
<br>
#### **parseFloat()函數**
  parseFloat()把其他類型轉換成浮點數。parseFloat()和parseInt非常相似,不同之處在于:parseFloat會解析第一個小數點,遇到第二個小數點或者非數字字符時停止解析,并得到結果。
```
var str01 = '3.14';
console.log(parseFloat(str01)); //輸出結果3.14
var str02 = '3.14aa';
console.log(parseFloat(str02)); //輸出結果3.14
var str03 = '3.14.314';
console.log(parseFloat(str03)); //輸出結果3.14
```
<br>
#### **+,-, -0 運算**
  我們還可以使用 + 號 和 - 號將其他類型轉換成數值類型。
```
var strNum = '18';
console.log(+strNum); // 取正
console.log(-strNum); // 取負
console.log(strNum - 0); // strNum先被轉換成數值類型,再做減法運算
console.log(strNum + 0); // 0先被轉換成字符串類型,再做拼接
```
  加號和減號放在變量前,分別是取正、取負的效果;
變量減去0,默認先將變量轉換成數值類型,再做減法運算,變量加上0,則按照字符串拼接的規則運算;
<br>
<br>
### **轉換成布爾類型**
**Boolean()函數**
  轉換成false的五種特殊值:""(空字符串)、0(包括 0、-0)、undefined、null、NaN;
  如果某個值為 **""(空字符串)、0(包括 0、-0)、undefined、null、NaN**時,那么這個值轉換成布爾類型之后的值為 false。否則,其值為 true。**(記住五種特殊值)**
```
console.log(Boolean(''));
console.log(Boolean(0));
console.log(Boolean(undefined));
console.log(Boolean(null));
console.log(Boolean(NaN));
```
  在JavaScript中,類型轉換不會報錯,轉成String時,Undefined和Null沒有toString()方法;轉成Number時,結果為數值或NaN;轉成Boolean時,有五中特殊情況