JavaScript逻辑运算:
1. &&(与运算)
真真为真,一假则假。
&&运算的结果取决于最后判断停止处的数(表达式)的值:
比如1&&2,其第一个数的布尔值为true,判断继续往后进行遇到第二个数到达程序结尾,无论第二个数是真是假都会作为与运算的结果,这一点和C很不同:
其中包括第二个数是其他数据类型:
其他示例:
2.||(或运算)
一真必真,全假为假。
||运算的结果取决于最后判断停止处的数(表达式)的值,一遇到真立即返回不进行后续判断:
3.!(非运算)
将表达式值的布尔值取反:
4.~(按位取反)
~是一元运算符,用来对一个二进制数按位取反,即0变1,1变0:
解释:3=>(00000011)=>11111100(负数补码)=>(10000110)(取反加1)=>-4
5.&(按位与)
参与运算的两个数据,按二进制位进行“与”运算。
5&2=>(101&010)=>(000)=>0
作用:(1)清零;(2)取一个数中某些指定位;(3)保留指定位
运算符优先级:
优先级 | 运算符 | 顺序 |
1 | 小括号() | -------- |
2 | 一元运算符 | ++ -- ! ~ |
3 | 算术运算符 | 先* / %后+ - |
4 | 关系运算符 | > >= < <= |
5 | 相等运算符 | == != === !== |
6 | 逻辑运算符 | 先&& 后 || 先&后| |
7 | 赋值运算符 | = |
8 | 逗号运算符 | , |
注意:&&优先级比 || 优先级高 三目<||<<&&<!;
赋值运算符优先级问题:
|| 优先级 大于 =优先级
|运算优先级小于+运算优先级
A?A:B <=>A||B; A?B:A <=>A&&B
隐式类型转换:
两个感叹号强行转布尔值
转布尔(Boolean):
以下六种情况转布尔为假,其他都为真:
false
0
NAN
"" //空字符串
null
undefined
转数字:
转字符串(String):
布尔类型转字符串直接加引号:
数字转字符串直接加引号,特殊的表现形式不一样:
字符串的加减乘除操作:
数字加字符串都会转成字符串相加,其他运算会强行转成数字再运算。
对象转字符串,结果为[object Object]:
数组转字符串,去掉[]:
含有对象的数组转字符串:
对象转字符串实际上用的是对象自带的toString方法,(可以修改对象的toString方法证明),万物皆对象, 是对象就有toString方法。