数据类型转换、算数运算符、赋值运算符和一元运算符、关系运算符和逻辑运算符
a=null 数据类型是object
tyoeof判断值得类型所有得Null都是object
=赋值 ==判断 ===全等
数据类型转换
转换为字符串:
1.String(变量);强制转换字符串 都会变成双引号的
变量.toString(n);
toFixed(n); 有四舍五入功能 针对数值转换为字符串使用
2.变量.toString(n);转换为进制字符串
2-36的 正整数 应用场景:颜色
3.变量.toFixed(n);将数值转换为字符串并且保留小数位几位 这里数值只能填0-100正整数
任何类型转换为数值类型:
1.Number();强制转换为数值
(1)字符串如果里面包含非数字或者.和-以外的任何符号转换后都会变成NaN
(2). 只能出现一次
(3)- 只能出现在最前面
NaN //非数值
布尔值强制转换后,true会变为1,false会变为0
undefined强制转换后会变为NaN
null在强制转换为数值后,变为0
""空字符串强制转换为数值后,变为0
任何对象强制转换为数值后,变为NaN
字符串转换为整数 parseInt(字符串,进制);
parseFloat(字符串) 将字符串转变为浮点整数
转换为布尔类型
Boolean() 强制转换为布尔值时,只有""空字符串,false,0,undefined,null,NaN强制转换后是false,其他所有结果转换后都是true
算数运算符
+ - * / %( 取模)
如果运算符两端都是数值,按照数值运算
如果两端都是字符串,按照字符串运算,+运算字符串首尾相连,如果不是+法运算,则自动强制转换为数值,进行数值运算,NaN参与运算时都是NaN
当运算符两端如果有一个是字符串类型,在+法运算时,会强制将另一端转换为字符串,然后进行首位相连
除了字符串以外的任何类型,如果进行+ - * / %时都会先强制转换为数值型,然后在进行运算,数组除外
赋值运算符和一元运算符
+= -= *= /= %=
a+=n 在原值的基础上累加一个n,a是重新被赋值的
任何运算符都会返回一个结果
a=3 返回结果是3
var a=b=3; 先把b=3的结果赋值给a,然后3赋值给b
var s=a=3,b=2; 先把a=3的结果赋值给s,然后把3赋值给a,然后把2赋值给了b
var s=(a=3,b=2); 先把3赋值给a,然后把2赋值给b,然后把b=2的结果赋值给s,所以s=2;
在+=运算符中,如果有字符串参与运算将会转换为字符串然后首尾相连
一元运算符
如果其中有字符串或者其他非数值,在使用++或者--时都会强制转换为数值运算
++a和a++;运算完成后,a的结果都是+1,相同的
a++和++a运算时的返回值不同,a++返回值时a+1之前的值 ++a,返回值时a+1之后的值
关系运算符和逻辑运算符
< <= > >= == != !==
关系运算符的返回结果是布尔值
a<b//unicode转换为阿斯克码比较
如果a<b是true 那么a>b就是false,如果两个值完全相等时,不会这样处理,只会比较相等问题
一般来说,运算时,会自动强制转换为数值运算
自动强制转换,隐式转换
==比较时,会先将运算符两端的内容隐式转换为相同的类型,然后在进行比较
===比较时,不会隐式转换相同类型,先比较类型是否相同然后在比较值 对象比较会隐式转换
0==false
""==false
""==0
undefined==null
未定义的变量时undefined
NaN==NaN false
NaN永远与NaN无法比较
isNaN(变量名) 判断变量是否是NaN如果是返回
!=不等于 !==不绝对等于
逻辑运算符
&& || !
console.log(a>2 && a<10);
console.log(a<3 || a>5);
! 是取反,先将这个值转换为布尔值,然后再取反
var a=true;
//console.log(!a);
a=!a;
如果a是 false,null,0,"",undefined,NaN 这六种时 !a的结果就是true
var a=3;
var s=a || 5;
如果a强制转换为布尔值时,结果是true,则直接把3赋值给s,如果转换布尔值后的结果是false
直接将5赋值给s