类型转换
字符串转换
alert()
string()
prompt()
数字类型转换
Number()
在数字字符串前加 +
在表达式或字符串后加 * 1
布尔类型转换
undefined ,null ,0 , NaN均为 false
0以外的所有数字均为 true
“ ” true
“abc” true
“” false
特殊值
转小写 toLowerCase()
转大写 toUpperCase()
undefined 转化为 NaN
null 转为 0
true 转为 1
false 转为 0
“” 转为 0
“ ” 转为 0
运算符
运算符 + 变量,一元运算符
算术运算符
+ - * / % ** ++ --
赋值运算符
=
+= -= *= /= %=
自增自减运算符
++ --
前后置区别:
++变量,该表达式的值为变量变化后的值
变量++,该表达式的值为变量变化钱的值
关系运算符
> < >= <= == === !== !===
关系运算符的结果都是布尔类型
不同类型比较
数字类型,先转为为数字类型,在判断大小
布尔类型,true转为1,false转为0
0 == “0”
严格相等
严格相等比较时,不进行类型转换
null和undefined比较
null == undefined //true
null === undefined //false
null ,undefined 和其他类型比较
//null = 0
console.log(null > 0);//false
console.log(null >= 0);//true
console.log(null <= 0);//true
console.log(null < 0);//false
//没有转换类型
console.log(null == 0);//false
//undefined = NaN
console.log(undefined > 0);//false
console.log(undefined >= 0);//false
console.log(undefined < 0);//false
console.log(undefined <= 0);//false
console.log(undefined == 0);//false
位运算符
按位与( & )
按位或( | )
按位异或( ^ )
按位非(~ )
左移( << )
右移( >> )
无符号右移( >>> )
逗号运算符
let a = (1 + 2, 3 + 4);
alert( a ); // 7(3 + 4 的结果)
三元运算符
格式:(条件表达式)?表达式1:表达式2
计算结果:如果条件为真,结果为表达式1,否则返回表达式2
与if-else的区别:
1、三元运算符可简化if-else
2、三元运算符必须返回一个结果,因为运算符必须返回一个结果
3、if后边的代码块可以有多个
逻辑运算符
&& 短路 与
逻辑运算符两边可以为任意类型,会自动进行类型转换,转换为布尔类型,在判断
1、传统的编程当中,当两个操作都为真时,返回true,否则返回false(见假就假)
2、寻找第一个假值
从左到右依次计算操作数
在处理每一个操作数时,都将其转化为布尔值,如果结果为false,就停止计算,
并返回初始值(数字原本的值,不是true和false)。
如果所有的操作数都被计算过,例如都是真值,则返回最后一个操作数。
换句话说,与运算返回第一个假值,如果没有假值就返回最后一个值。
上面的规则和运算很像,区别就是与运算返回第一个假值,而或运算返回第一个真
值。
3、短路
与运算符 && 的另一个用途是所谓的“短路求值”;
这指的是,&&对其参数进行处理,直到达到第一个假值,然后立即返回该值,而
无需处理其他参数
如果操作数不仅仅是一个值,而是一个有副作用的表达式,例如变量赋值或函数调
用,那么这一特殊的重要性就变得显而易见了。
注意:
&& 与运算符的优先级比 || 或运算符的优先级要高。
所以代码a && b || c && d跟 &&表达式加了括号完全一样:(a && b) || (c && d)
总结:
&&逻辑运算规则
操作1 操作2 结果
true true true
true false false
false true false
false false false
见假就假
js的&&操作都是 短路 操作
如果第一个值为false,则第二个值不进行操作。
|| 短路 或 见真就真 布尔类型
从左到右依次计算操作数
处理每一个操作数时,都将其转化为布尔值,如果结果是true,就停止计算,返回
这个操作数的初始值。
如果所有的操作数都被计算过(也就是,转换结果都是false),则返回最后一个
操作数。
返回的值是操作数的初始形式,不会做布尔转换
换句话说,一个或运算 || 的链,将返回第一个真值,如果不存在真值,就返回该链
的最后一个值
! 逻辑 非
! 便是布尔非逻辑运算
语法:
res = !value
运算逻辑:
将操作数转换为布尔类型,true/false
两个!!非操作将某个值转换为布尔类型
!!把非布尔类型转换为布尔类型
优先级:
! > && > ||
??空值合并运算符
当一个值既不是null也不是undefined时,我们将其成为“已定义的(defind)”
a??b
如果a是已定义的,则结果返回a
如果a不是已定义的,则结果返回b
换句话说,如果第一个参数不是null和undefined,则??返回第一个参数,否则,返回
第二个参数。
使用场景:
1、给变量提供默认值
2、从一系列的值中选出第一个非null和undefined的值
于安全原因,JavaScript禁止将??运算符与&&和 || 一起使用,除非括号指明了优先级
判断数字
isFinite
isNaN