强制类型转换
-
Boolean()
小工具:将指定类型的值转换为布尔值。总是得到true或false。- 任何非空字符串都会转换为true,空字符串转换为false。
- 任何非零数值都会被转换为 true,0和NaN会被转换为false。
- undefiend转换为false。
- 任何对象都会转换为true,null转换为false。
NaN(Not a Number),是数值型,用于表示一个本来要返回值的操作但是并没有返回数值的情况。
-
Number()
小工具:将非数值(任何数据类型)转换为数值。-
true将会被转换为1,false将会被转换为0。
-
null将会被转换为0。
-
undefined转换为了NaN。应该得到数值,但是返回的值不是数值的情况。
-
如果是字符串应该遵循以下规则:
- 字符串中只包含数值(整数、浮点数)则转换为对应的整数、浮点数。
- 空字符串、空白串转换为0。
- 除了上面的格式之外的字符,都转换为NaN。
-
-
parseInt()
小工具:将 字符串 转换为整数。(如果其中的值不是字符串那就得先转换为字符串),它会忽略字符串前面的空格,找到第一个非空格的字符。如果第一个字符不是数字(第一个字符以负号开头也可以)将会返回NaN。如果第一个字符是数值将继续往下找,一直找到所有字符或中途遇到第一个非数字字符。 -
parseFloat()
小工具:将字符串转换为小数。(语法规则和parseInt一样) -
toString()
工具:将对应的类型转换为对应的字符串。布尔型:
true=>'true',false=>'false'
数值:
1=>'1'
null和undefiend没有toString()工具。
-
String()
工具:将变量转换为字符串。如果你不确定变量值是不是undefiend或null时就使用它。- 如果值能够使用
toString()
工具,那String()
就调用toString()
得到结果。 - 如果值是null,直接返回null。
- 如果值是undefined,直接返回undefined。
- 如果值能够使用
隐式类型转换
隐式类型转换和上面的规则相同,通常发生在和运算符相关联的操作中。
运算符分类
只要用到了变量,就需要配合着运算符一起使用。
表达式:使用运算符将数据(变量、数据)按照对应的规则连接起来的式子叫表达式。
var a = 10;
var b = 10;
console.log(a + b);
console.log(1+1);
计算机的运算符是按照功能进行划分的:
- 算数运算符
- 赋值运算符
- 复合运算符
- 比较运算符
- 相等运算符
- 逻辑运算符
- 三元运算符
算数运算符
-
加号
+
。- 如果操作的两个对象都是字符串,则进行拼接。
第一个字符串拼接第二个
。 - 当有一个操作数是字符串时它会认为你要进行拼接操作。所以会将另外一个操作数也转换为字符串,(这个过程是系统自动进行转换的,即隐式转换)然后进行拼接。(
String()
或toString()
)。 - 其他类型就调用
Number()
进行转换。 +
放在数值前面。对数值不会产生任何影响。如果操作数为非数值将会调用Number()
对这个值进行转换。
- 如果操作的两个对象都是字符串,则进行拼接。
-
减法
-
、乘法X
、 除法/
,一样-
如果有一个(两个)操作数是字符串、Boolean、null或undefiend,则先调用
Number()
进行转换。 -
被除数/除数=商
- 被除数为0,结果就是0。(0除以任何数都是0)
- 除数为0 结果
Infinity
。 - 除数为-0 结果
-Infinity
。 - 被除数、除数都是0。结果
NaN
。
-
-
取余
%
,求模-
如果第一个数小于第二个数结果为第一个数。(2%5结果为2)
-
第二个数不能为0,如果为0结果为NaN。
NaN的特点:
- 任何涉及到NaN的操作结果都是NaN。
- NaN和任何值都不相等,包括自己。
-
取余在什么时候用?
-
求余数。
-
取范围。求余的值永远不会超过被除数。
x % 4
得到的数只能是0~3
,(x % 4) + 1
最后的结果肯定就是1~4 -
求出一个数的每一位商数是多少。
例:
1234
求出来:个位数、十位数、百位数、千位数。 -
-
var num = 1234;
//当前数/要求的位%10
console.log(parseInt(num/1000%10));
console.log(parseInt(num/100%10));
console.log(parseInt(num/10%10));
console.log(parseInt(num/1%10));
-
自增、自减
++
、--
,在自身的基础上+1
或-1
。++
和--
都可以放在操作数前面或后面:- 放在操作数后面先用后加。
- 放在操作数前面先加后用。
以上规则仅仅在使用++或 --本行适用。
- 如果操作数不是数值则内部使用
Number
工具进行转换,会改变原来变量的值。
复合运算符
+=
,a+=b
完全等价于a = a + b
-=
*=
/=
%=
赋值运算符
=
,将等号右边的值或表达式的结果赋给变量。
左边是一个变量,右边是值或者有值的内容。
比较运算符
比较的结果应该是布尔值。true或false。
>
,大于<
,小于>=
,大于等于。大于或者等于。<=
,小于等于。小于或者等于。
比较规则:
-
如果两个操作数都是数值,进行数值比较大小。
-
如果两个操作数都是字符串,比较两个字符串对应的字符编码(不常用)
从第一个字符的编码开始比较,如果第一个字符的编码就能比较出大小,后面的就不用比较了。如果不能得出大小,就从第二位继续比较,以此类推。一直到最后都没比较出来的话,那么谁的位数多谁就大。
-
其他类型的比较调用Number()进行转换。
-
NaN和任何比较都是false。
相等操作符
-
相等和不相等
==
,判断是否等于。如果两个操作数相等,返回true。!=
,判断是否不等于。如果两个操作数不相等返回true。
比较规则:
- 类型相同直接比较。
- 类型不同,只要有一个操作数是数值就先调用
Number()
- 都是基本类型
number
、string
、boolean
和基本类型比较,都会先转换为数值。1 == '1'
- null和undefined相等。
- NaN和NaN不相等。
-
全等和不全等
===
,全等于。两个操作数未经转换并且值相等返回true。!==
,不全等。在两个操作未经转换就不相等的情况下返回true。
一个等号是赋值、两个等号比较是否相等(转换的过程)、三个等号比较是否全等于(类型和值必须完全相等才行)