1.算术运算符
+ - * / %
加 减 乘 除 取余
加法运算:
- 与字符串的加法运算,会将其转换为字符串类型,再进行拼串
- Object, Array 在运行加法的时候会用 .toString转为字符串,然后参考第一条。
其他运算:
- 都是将其转换成Number类型,然后再运算
- NaN不管和谁运算结果都是NaN
- Infinity和正常数字
+,- ,*, /
运算依然是Infinity,反之是NaN;%运算时等于NaN- 当0作为除数时,结果是±Infinity
- 最好不要进行浮点数运算,因为不精确
//🎈正常数字运算
console.log( 1 + 1);//2
//🎈浮点数运算
console.log( 0.1 + 0.2);//0.30000000000000004
//🎈Infinity和NaN运算
console.log( Infinity - 100);//Infinity
console.log( -Infinity / 100000000);//-Infinity
console.log( Infinity + -Infinity );//NaN
//Infinity该值在js中表示无穷,是无法参与运算的,因为无法解析
console.log( NaN + Infinity );//NaN
console.log( NaN + -Infinity );//NaN
//🎈字符串加法运算
var str1 = '世间所有相遇';
var str2 = '都是久别重逢';
console.log( str1 + str2);//'世间所有相遇都是久别重逢'
console.log( {name: 'chonger'} + 'hailou');//[Object,Object]hailou
console.log( undefined + 'abc' );//undefinedabc
console.log( null + 'abc' );//nullabc
console.log( '1' + [1,2,3] );//11,2,3
//🎈Object Array 加法运算
console.log( {age: 5} + 5 );//[object Object]5
console.log( undefined + [{}] );//undefined[object Object]
console.log( null + [] );//null
//其他运算示例:
console.log( {} - -100 );//NaN
console.log( ['1'] - 1 );//0
console.log( Infinity / Infinity );//NaN
console.log( 2 / 0 );//Infinity
console.log( -2 / 0 );//-Infinity
console.log( true / {} );//NaN
console.log( -Infinity % 2 );//NaN
2.一元运算符
+
(正号) -
(负号)
3.自增和自减
++
--
在自身的基础上增1或减1。
++
--
操作符会把后边的数据类型转为数字然后再+1.
++操作符后置,先运算再自增;++操作符前置,先自增再运算;自减同理
var b =20;
var result = b++ + ++b + b;
// result = 20 + 22 + 22;
console.log(result);//64
4.逻辑运算符
!
(非) &&
(与) ||
(或)
会把所有的数据都转化成为布尔值,Boolean();
0 NaN undefined null false “” 六个大爷,在用Boolean转化为布尔值的时候是false
①!
——>取反运算
var a = false;
a = !a;//两次取反,则不会变化:a = !!a;
console.log(a);//true
//对非布尔值进行非运算:先将其转换为布尔值,再运算【隐式类型转换】
var b = 0;
b =!b;
console.log(b);//true
②&&
(短路与) <通关游戏>
规则:同真为真,一假都假。如果第一个值为false,则不看后边的值。
从左往右 先把左边的数据转化为布尔值,如果为false,如果为true继续下一关
对非布尔值的运算:
- 两个值都为true,则返回后边的值;如果第一个值为true,必然返回第二个值。
- 两个值都为false,则返回前边的值;如果第一个值为false,直接返回第一个值。
- 如果第一个值是NaN或Undefined,Null,直接返回该值。
var result =true && true;//true
var result =1 && 2;//2
console.log( undefined && 2 );//undefined
③||
(短路或)<寻找生命中的唯一>
规则:同假为假,一真都真。如果第一个值为true,则不看后边的值。
从左往右 先把左边的数据转化为布尔值,如果为true停止,如果为false继续找
对非布尔值的运算:
- 如果第一个值为true,则直接返回第一个值;
- 如果第一个值为false,则返回第二个;
5.赋值运算符
将符号右侧的值赋值给符号左侧的值
*= += -= = /= %=
eg:a = a + 5等价于a += 5.以此类推
关于逗号操作符:同时声明变量并赋值
var a=1, b=2;
6.关系运算符
比较值之间的大小关系,关系成立返回ture,不成立返回false
> >= < <=
非数值情况:
- 会将其先转换成数字再比较;(ture为1,false为0)
- 如果符号两侧都是字符串,不会将其转换为数字,而是利用其Unicode编码再比较;
console.log(1 > ture);//false
console.log(1 >= ture);//true
console.log(1 > "0");//true
console.log(10 > null);//true
//任何值和NaN做任何比较都是false
console.log(10 <= "hello");//false
console.log(ture > false);//true
//两侧都是字符串
console.log("1" < "5");//ture
//a编码为0061,b编码为0062
console.log("a" < "b");//true
//比较字符编码时,是一位一位比较(第一位与第一位比,第二位与第二位..);如果两位的第一个值一样,则比较下一位
console.log("abc" < "b")//true
console.log("bbc" < "b");//false
//以下情况是第一个1的编码小于5的编码,因此第二个1并未参与比较
console.log("11" < "5");//true
//为解决上边两个字符串型的数字产生的问题,解决方案:转型--->添加个+
console.log("11231" < +"5");//false
console.log( undefined > -5 );//false
console.log( null > -1 );//true
//涉及到NaN的是false
console.log( {} > false );//false
7.Unicode编码
(1)当输出一个Unicode中的字符时,在字符串中使用转义字符输入Unicode编码。格式:\u四位编码
<script type="text/javascript">
console.log("\u2620")
</script>
(2)在网页中输出一个Unicode字符时,利用&#编码,这里的编码需要十进制,而Unicode编码是十六进制(利用计算机转换就成)
<body>
<h1>☠</h1>
</body>
8.相等运算符
用来比较两个值是否相等,相等返回true,否则返回false
== != === !==
相等 不等 全等 不全等
eg:a == 4; a != 4;
-
若值的类型不同,将其转换为相同类型再比较,一般转换为Number;
-
当进行!=运算时,即使转换类型后再比较,也是返回false;
-
全等运算不进行类型转换,类型不同,直接返回false;
-
不全等运算不进行类型转换,类型不同,直接返回true;
console.log("1" == 1);//true
console.log(true == "1")//true
//特殊
console.log(null == 0);//false
console.log(undefined == null);//true
console.log(undefined === null);//false
//NaN不和任何值相等,包括其本身
console.log(NaN == undefined);//false
//那么当判断一个值是否是NaN时:
var b == NaN;
console.log(b == NaN);//(此时一定会false)
//解决方案:可以通过isNaN()函数来判断一个值是否时NaN
var b == NaN
console.log(isNaN(b));
9.条件运算符(三元)
语法:条件表达式 ? 语句1: 语句2;
执行流程:
var a = 30;
var b = 20;
var c = 50;
//获取a和b 中的最大值
var max = a > b ? a : b;
//获取a b c 中的最大值
max = max > c ? max : c;
console.log("max = "+max);
//合并为一行,获取a b c中的最大值(不建议使用,不方便阅读)
var max =a > b ? (a > c ? a : c) : (b > c ? b : c);
//当求值结果为非布尔值,先将其转换成布尔值,再运算
"hello" ? alert("语句1") :("语句2");//语句1
"" ? alert ("语句1") :("语句2");//语句2
10.运算符优先级
优先级一样高,则从左往右计算。忘记优先级高低时,用()解决
1.
()
2.!,--,++
,正号,负号
3.*,/
4.+,-
5.<,>,>=,<=
6.==
,!=
,===
,!==
7.&&
8.||
9.?:
10.=,+=,-,-=,*=,/=,%=
(赋值运算)