[TOC]
# JavaScript數(shù)據(jù)類型
分為 “**基本類型**” 和 “**引用類型**” 兩大類
## **六大基本數(shù)據(jù)類型**
1.**Number:數(shù)值類型**
2. **String:字符串類型**
3. **Symbol 類型**
4. **Boolean:布爾類型**
5. **Undefined:未定義類型**
6.**Null:空類型**
*****
## **獲取變量的類型**
1、typeof 用來(lái)獲取變量的數(shù)據(jù)類型
2、typeof 運(yùn)算結(jié)果值是字符串類型
```
// 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,對(duì)象
var str = typeof 123;
console.log(typeof str);//string
// 注意:typeof 或去到的null的類型是Object
```
<br>
<br>
## **數(shù)據(jù)類型轉(zhuǎn)換**
<br>
### **轉(zhuǎn)換為字符串類型**
#### **toString()方法**
```
//方式一:toString()
var age = 18;
console.log(age.toString());
console.log(true.toString());
console.log(undefined.toString());
//報(bào)錯(cuò)信息:Cannot read property 'toString' of undefined;
翻譯:無(wú)法讀取未定義的屬性“toString”
```
<br>
#### **String()函數(shù)**
  有了toString()函數(shù),為什么還要有String()函數(shù)?
  某些類型沒(méi)有toString()函數(shù),這個(gè)時(shí)候可以使用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 + " " 的形式,當(dāng) "+" 號(hào)一邊的操作符是字符串類型,另一邊的操作符是其它類型的時(shí)候,會(huì)先把其它類型轉(zhuǎn)換成字符串再進(jìn)行字符串拼接,最后返回字符串。
>[info]注意:
1、toString()方法只能將數(shù)值類型和布爾類型轉(zhuǎn)換成字符串類型,不能將Undefined和Null類型轉(zhuǎn)成字符串類型;
2、String()函數(shù)能將所有基本類型轉(zhuǎn)成字符串類型;
3、函數(shù)和方法的區(qū)別:方法需要調(diào)用者才能調(diào)用,函數(shù)不需要調(diào)用者;
  以上三種數(shù)據(jù)類型轉(zhuǎn)換,以后開發(fā)中會(huì)常用到toString方式。
<br>
### **轉(zhuǎn)換成數(shù)值類型**
  其他類型轉(zhuǎn)成數(shù)值類型的時(shí)候,存在有兩種可能的值,一種是數(shù)字,一種是NaN(NaN也是Number類型?。?。轉(zhuǎn)換成功時(shí),結(jié)果為數(shù)字,轉(zhuǎn)成失敗時(shí),結(jié)果為NaN。
<br>
#### **Number()函數(shù)**
  Number()可以把任意值轉(zhuǎn)換成數(shù)值類型,在轉(zhuǎn)換字符串的時(shí)候,如果字符串中存在一個(gè)非數(shù)字字符,轉(zhuǎn)換結(jié)果為 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()函數(shù)**
  如果第一個(gè)字符是數(shù)字或運(yùn)算符號(hào),那么就開始解析,直到遇到非數(shù)字字符,停止解析并得到解析結(jié)果;如果第一個(gè)字符是非數(shù)字且非運(yùn)算符號(hào),則不解析并得到結(jié)果 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()函數(shù)**
  parseFloat()把其他類型轉(zhuǎn)換成浮點(diǎn)數(shù)。parseFloat()和parseInt非常相似,不同之處在于:parseFloat會(huì)解析第一個(gè)小數(shù)點(diǎn),遇到第二個(gè)小數(shù)點(diǎn)或者非數(shù)字字符時(shí)停止解析,并得到結(jié)果。
```
var str01 = '3.14';
console.log(parseFloat(str01)); //輸出結(jié)果3.14
var str02 = '3.14aa';
console.log(parseFloat(str02)); //輸出結(jié)果3.14
var str03 = '3.14.314';
console.log(parseFloat(str03)); //輸出結(jié)果3.14
```
<br>
#### **+,-, -0 運(yùn)算**
  我們還可以使用 + 號(hào) 和 - 號(hào)將其他類型轉(zhuǎn)換成數(shù)值類型。
```
var strNum = '18';
console.log(+strNum); // 取正
console.log(-strNum); // 取負(fù)
console.log(strNum - 0); // strNum先被轉(zhuǎn)換成數(shù)值類型,再做減法運(yùn)算
console.log(strNum + 0); // 0先被轉(zhuǎn)換成字符串類型,再做拼接
```
  加號(hào)和減號(hào)放在變量前,分別是取正、取負(fù)的效果;
變量減去0,默認(rèn)先將變量轉(zhuǎn)換成數(shù)值類型,再做減法運(yùn)算,變量加上0,則按照字符串拼接的規(guī)則運(yùn)算;
<br>
<br>
### **轉(zhuǎn)換成布爾類型**
**Boolean()函數(shù)**
  轉(zhuǎn)換成false的五種特殊值:""(空字符串)、0(包括 0、-0)、undefined、null、NaN;
  如果某個(gè)值為 **""(空字符串)、0(包括 0、-0)、undefined、null、NaN**時(shí),那么這個(gè)值轉(zhuǎn)換成布爾類型之后的值為 false。否則,其值為 true。**(記住五種特殊值)**
```
console.log(Boolean(''));
console.log(Boolean(0));
console.log(Boolean(undefined));
console.log(Boolean(null));
console.log(Boolean(NaN));
```
  在JavaScript中,類型轉(zhuǎn)換不會(huì)報(bào)錯(cuò),轉(zhuǎn)成String時(shí),Undefined和Null沒(méi)有toString()方法;轉(zhuǎn)成Number時(shí),結(jié)果為數(shù)值或NaN;轉(zhuǎn)成Boolean時(shí),有五中特殊情況
