JS数据类型转换问题
一、数据类型的转换
- 数据类型的转换方法
-
强制转换(显示转换,主动转换)
-
字符转数值
-
parseInt(要转换的数值或变量)
- 转整数
- 从左向右依次转换,遇到第一个非数字的字符,停止转换
- 忽略小数点后的内容,其实是将小数点识别成了非数字,所以没有四舍五入
- 如果第一位就是非数字,直接 NaN
- NaN:not a number
- 不是一个数字的数值型数据,非法的数值运算结果
-
parseFloat(要转换的数值或变量)
- 转小数
- 从左向右依次转换,遇到第一个非数字的字符,停止转换
- 可以识别小数点
- 如果第一位就是非数字,直接 NaN
- NaN:not a number
- 不是一个数字的数值型数据,非法的数值运算结果
-
Math.round(要转换的数值或变量)
- 四舍五入
- Math.round()不是专门做字符转数值的,专门做取整
- 严格转换,只要出现非数字就是NaN
- 取最近的整数
-
Number(要转换的数值或变量)
- 直接转
- Number()不是专门做字符转数值的,专门做系统内置的构造函数,用来创建数值对象
- 严格转换,只要出现非数字就是NaN
- 直接转换,不分小数整数
-
-
数值转字符
-
数值变量.toString()
- 直接转换,相当于加个引号
-
数值变量.toFixed(n)
- 保留n位小数 直接转换,相当于加个引号
-
-
其他类型转换
- 其他转布尔
- 布尔转数值
- 其他转字符
-
-
隐式转换(被动转换)
- 情况和规则:
- 算数运算
+
两边只要出现字符,结果必然为字符-
、*
、/
、%
结果必然是数值(字符转数值)
- 关系运算
>
、<
、>=
、<=
两边那只要出现数值,那么另一边也会转为数值,进行比较
- 算数运算
- 情况和规则:
-
二、数据的运算符
-
算数运算符
+
加号、加法+
在js中不是单纯的加法:- 当加号两边都是数值型数据时,是加法运算
- 两边任意一边出现字符就变成了拼接就不是加法,+已经不是单纯的加法了,变成了拼接,拼接就是将两个数组,直接组合起来
-
、*
、/
、%
- 就是正常的数学运算
- 就算两边不是数值,也会默认转成数值,进行运算
- 如果某个数据不能转成数值,就会得到
NaN
-
关系运算符 - 结果是布尔值
>
、<
、>=
、<=
- 只要又一边出现数值,都是数值的比较规则
- 如果都是字符,才是字符的比较规则:逐位比较,得到结果,就停止
!=
、==
- 会发生隐式类型转换,只比较大小,不比较类型
!==
、===
- 不会发生隐式类型转换,不仅比较大小,还比较类型
-
逻辑运算符 - 主要操作布尔值
- 或 ||
- 或的规则:两边只要出现true,结果就是true,必须都为false,结果踩死false
- 且 &&
- 且的规则:两边只要出现false,结果就是false,必须都为true,结果踩死true
- 非 !
- 取反
- 或 ||
-
赋值运算符
=
,+=
,-=
,*=
,/=
,%=
- 先计算,再赋值 c1 = c1 + 10; c1 += 10;
-
一元运算符
-
++
自增 -
增加1
-
前后之分
- 前自增
++n
:先计算,后使用 - 后自增
n++
:先使用,后计算
- 前自增
-
--
自减 -
减少1
-
前后之分
- 前自增
--n
:先计算,后使用 - 后自增
n--
:先使用,后计算
- 前自增
-