[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()函数** &emsp;&emsp;有了toString()函数,为什么还要有String()函数? &emsp;&emsp;某些类型没有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 + ''); ``` &emsp;&emsp;num + " " 的形式,当 "+" 号一边的操作符是字符串类型,另一边的操作符是其它类型的时候,会先把其它类型转换成字符串再进行字符串拼接,最后返回字符串。 >[info]注意: 1、toString()方法只能将数值类型和布尔类型转换成字符串类型,不能将Undefined和Null类型转成字符串类型; 2、String()函数能将所有基本类型转成字符串类型; 3、函数和方法的区别:方法需要调用者才能调用,函数不需要调用者; &emsp;&emsp;以上三种数据类型转换,以后开发中会常用到toString方式。 <br> ### **转换成数值类型** &emsp;&emsp;其他类型转成数值类型的时候,存在有两种可能的值,一种是数字,一种是NaN(NaN也是Number类型!)。转换成功时,结果为数字,转成失败时,结果为NaN。 <br> #### **Number()函数** &emsp;&emsp;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()函数** &emsp;&emsp;如果第一个字符是数字或运算符号,那么就开始解析,直到遇到非数字字符,停止解析并得到解析结果;如果第一个字符是非数字且非运算符号,则不解析并得到结果 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()函数** &emsp;&emsp;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 运算** &emsp;&emsp;我们还可以使用 + 号 和 - 号将其他类型转换成数值类型。 ``` var strNum = '18'; console.log(+strNum); // 取正 console.log(-strNum); // 取负 console.log(strNum - 0); // strNum先被转换成数值类型,再做减法运算 console.log(strNum + 0); // 0先被转换成字符串类型,再做拼接 ``` &emsp;&emsp;加号和减号放在变量前,分别是取正、取负的效果; 变量减去0,默认先将变量转换成数值类型,再做减法运算,变量加上0,则按照字符串拼接的规则运算; <br> <br> ### **转换成布尔类型** **Boolean()函数** &emsp;&emsp;转换成false的五种特殊值:""(空字符串)、0(包括 0、-0)、undefined、null、NaN; &emsp;&emsp;如果某个值为 **""(空字符串)、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)); ``` &emsp;&emsp;在JavaScript中,类型转换不会报错,转成String时,Undefined和Null没有toString()方法;转成Number时,结果为数值或NaN;转成Boolean时,有五中特殊情况