数据类型分类
基本数据类型
- string
- number
- boolean
- object
- function
- symbol
引用数据类型
- Object
- Date
- Array
不包含任何值的数据类型
- null
- undefined
数据之间的转换
其他数据类型转换成 Number
转换方法
- Number(val)
- parseInt/parseFloat(val)
Number
浏览器内部默认 Number
转换在进行计算
1 | Number("1"); // 1 |
结论:
- 布尔值转为数字 1 或 0
- null 转为数字 0
- 空字符串转换为数字 0
- undefined 转为 NaN,任何数加上 NaN 都等于 NaN
- 字符串中出现了非数字都将会转换为 NaN
parseInt/parseFloat
parseFloat:顾名思义,将字符串转换成整数
parseFloat:将字符串转换成浮点数
1 | parseInt("1.1"); // 1 |
结论:
- 从左侧第一个字符开始查找,遇到非数字就停止
- parseFloat 比 parseFloat 多识别一个小数点
- 字符串中出现了非数字都将会转换为 NaN
其他数据转换成 String
转换方法
- toString(val)
- String(val)
1 | String(123); // "123" |
如果 +
号左边出现字符串或对象,就会按照字符串来拼接
其他数据转换成 Boolean
规则
只有 0、NaN、null、undefined、空字符串 五个值会被转为 false,其余都是true
隐式
- 在条件判断中,条件处理的结果就是布尔值
显式
- ! 转换为布尔值后取反
- !! 取反之后再取反
- Boolean(val)
1 | Boolean(undefined); // false |
+ 的转换规则
+ 可以把变量转换为数字
1 | +"10"; // 10 |
快速将时间转换为时间戳
1 | +new Date(); // 1599039501529 |
== 的转换规则
类型一样时
比较的是堆内存中的地址
1 | 1 == 1; // true |
类型不一样时
只要 null == undefined 为 true,且 null/undefined 和其他任何数据类型的值都不相等
1 | null == undefined; // true |
如果 == 号两边数据类型不同,会把两边的数据类型转为数字再做比较