1、有哪些数据类型?
(1)基本数据类型:指简单的数据类型。有五种,分别是:
-
数字 → Number 特殊:NaN 表示Not a Number,不是一个数字。但却是Number类型。
-
字符串 → String
-
布尔 → Boolean
-
未定义 → Undefined
-
空 → Null
(2)引用数据类型(复杂数据类型) 有多种,比如:
-
数组 → Array
-
日期 → Date
-
对象 → Object
-
...
2、数据类型转换
(1)强制转换:就是手动的通过转换工具将一个数据转换成另一种类型的数据。
① 其他数据类型转换数字 Number
- Number(其他数据);
//数值字符串转数字 var result1 = Number('123'); console.log(result1);//123 console.log(typeof(result1)); //number //非数值字符串转数字 var result2 = Number('abc'); console.log(result2); //NaN,'abc'整体不是数值,转换不了正常的数字。 console.log(typeof(result2)); //number //非数值字符串转数字 var result3 = Number('12abc'); console.log(result2); //NaN,'12abc'不是数值,转换不了正常的数字 console.log(typeof(result2)); //number //布尔值转数字 var result4 = Number(true); var result5 = Number(false); console.log(result4) //1 console.log(result5) //0 //undefined 转数字 var result6 = Number(undefined); console.log(result6); //NaN //null 转数字 var result7 = Number(null); console.log(result7); //0
- parseInt(其他数据);
//与Number工具不同是,parseInt能将正常的字符串数值转换为整数 //数值字符串转数字 var result1 = parseInt('123.34'); console.log(result1);//123 console.log(typeof(result1)); //number //非数值字符串转数字 var result2 = parseInt('abc'); console.log(result2); //NaN,'abc'整体不是数值,转换不了正常的数字。 console.log(typeof(result2)); //number //非数值字符串转数字 var result3 = parseInt('12abc'); console.log(result2); //12,会把最前面的数字提取出来 console.log(typeof(result2)); //number //布尔值转数字 var result4 = parseInt(true); var result5 = parseInt(false); console.log(result4) //NaN console.log(result5) //NaN //undefined 转数字 var result6 = parseInt(undefined); console.log(result6); //NaN //null 转数字 var result7 = parseInt(null); console.log(result7); //NaN
- parseFloat(其他数据);
- 与parseInt不同的是,可以将正常的小数字符串数值转换成数字类型的小数,其他情况都和parseInt相同。
var result1 = parseFloat('3.14'); console.log(result1); //3.14 console.log(typeof(result1)); //number
注意事项:①Number 可以将true和false 转换成1、0 但是parseInt 和parseFloat 将true和false 转换成 NaN
②Number 可以将null转换成0 ,parseInt 和parseFloat 将null转换成 NaN
②其他类型数据转字符串 String
所有的数据在转换成字符串时,其实就是在其他数据两边加上双引号或单引号
- 变量名.toString();
//数字转字符串 var num = 123; var result1 = num.toString(); console.log(result1); //"123"; //布尔值转字符串 var flag = true; var flag2 = false; console.log(flag.toString()); //"true" console.log(flag2.toString());//"false" //在使用变量.toString()方法时,变量的值不能为undefined和null,否则会报错 var a = null; a.toString(); //报错
注意:在使用变量.toString()方法时,变量的值不能为undefined和null,否则会报错
- String(其他数据)
var result1 = String(123); //'123'; var result2 = String(true); //'true'; var result3 = String(NaN); //'NaN';
③其他数据类型转布尔 Boolean
注意:null、undefined、0、NaN、'' 转换为boolean结果为false,其他的数据转换的结果为true
-
Boolean(null); //false Boolean(''); //false //其他略 Boolean('我'); //true Boolean(123); //true
在做算术运算时(除了和字符串做相加运算外),其他非数字类型的数据会自动的转换为Number类型的数据。
就相当于悄悄的,看不见的用Number(其他数据)转换为数字。
任何数据和NaN做运算(除了和字符串做相加运算外),结果始终都是NaN。var result1 = '2' - 1; //字符串 '2' 自动转换为数字 2 console.log(result1); // 1; var result2 = '3a' - 1; //字符串 '3a' 自动转换为数字 NaN console.log(result2); // NaN
任何数据和字符串做相加运算时,其他非字符串数据会自动的转换为String类型的数据。
就相当于悄悄的,看不见的用String(其他数据)转换为字符串。var result1 = true + '我'; // 布尔值 true 自动转换为字符串 'true' console.log(result1); // 'true我'
在取反、选择语句 和 循环语句中的条件表达式中,其他数据会自动的转换为布尔值。
就相当于悄悄的,看不见的用Boolean(其他数据)转换为布尔值。console.log(!1); //false ; 数字1 转换为boolean值为 true,对true取反就是false consoel.log(!(1>=2)); //true
- 那么,问题来了,看下面代码,输出什么,foo的值为什么?
-
var foo = "11"+2-"1"; console.log(foo); console.log(typeof foo);
foo的值为111,foo的类型为number
- 解析:
任何数据和字符串做相加运算时,其他非字符串数据会自动的转换为String类型的数据。
在做算术运算时(除了和字符串做相加运算外),其他非数字类型的数据会自动的转换为Number类型的数据。