[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时,有五中特殊情况