一、算术运算
算术运算对非数值(Number)类型进行运算时,会将这些值转换为数值类型,再进行运算。
注:任何值和NaN做运算都得NaN。
“+”可以对俩个值进行加法运算,并将结果返回。
- 如果对两个字符串进行加法运算,则会做拼接。
- 任何值和字符串做加法运算,都会转换为字符串,再将其进行拼接。
console.log(1+"2"); //12
console.log(1+2+"3"); //33
console.log(1+"2"+3); //123
引申:数值(number)转换为字符串。
var a=1;
a=1+"";
console.log(typeof a); //string
console.log(a); //1
二、一元运算符
- +(正号)不会对数字产生任何影响。
- -(负号)对数字进行取反。
- 对非数值类型会将其转换为数值类型。利用该特性:可以将字符串转换为number类型。
var a="1";
a = +a; //隐式转换
console.log(typeof a); //number
console.log(a); /1
三、自增和自减
- a++的值等于原变量的值(自增前的值)
- ++a的值等于原变量新值(自增后的值)
- a–的值等于原变量的值(自减前的值)
- –a的值等于原变量新值(自减后的值)
var a=20;
console.log(a++); //20
console.log(++a); //21
var b=20;
console.log(b--);//20
console.log(--b); //19
四、逻辑运算
(1)!(非)可以用来对一个值进行非运算(取反)
- 如果一个值进行两次取反,它不会变化。
- 如果非布尔值进行取反,则会先将其转换为布尔值,再进行取反。
利用该特性这两个特性可以将其他类型的数据转换为布尔型
var a=1;
a=!!a;
console.log(typeof a); //boolean
console.log(a); //true
(2)&&(与)可以对符号俩侧的值进行运算并返回结果
- 如果非布尔值进行与运算,则会先将其转换为布尔值,再进行与运算。
- 两个值中只要有一个值为false就返回false。
- 只有两个值为true时,才会返回true。
&&短路与
- 如果第一个值为false,则不会看第二个值,直接返回第一个值。
- 如果俩个值都为true,则返回第二个值。
var a=1 && 2; //2
var a="" && 2; //""
true && alert("我被执行");
false && alert("我没有被执行");
(3)||(或)可以对符号两侧的值进行或运算并返回结果
- 如果非布尔值进行或运算,则会先将其转换为布尔值,再进行或运算。
- 两个值中只要有一个值为true就返回true。
- 只有两个值为false时,才会返回false。
||短路或
- 如果第一个值为true,则不会看第二个值,直接返回第一个值。
- 如果俩个值都为false,则返回第二个值。
var a=1 || 2; //1
var a="" || 2; //2
true && alert("我没有被执行");
false && alert("我有被执行");
五、关系运算(>= ,>,<=,< )
- 非数值转为数值 ,再比较。
- 任何值和NaN做任何比较都是false。
- 如果符号两边都是字符串,不会将其转换为数值,而是分别比较字符串中的Unicode编码。
- 比较字符编码时是一位一位进行比较。
console.log("11"<"5"); //true
console.log("a"<"b"); //true
console.log("abc"<"b"); //true
console.log("bbc"<"b"); //false
六、相等和不相等运算(==、!=)
- 如果值的类型不同,会自动类型转换。
- NaN不和任何值相等,包括他本身。
- undefined等于null。
true == "1" ; //true
"true" == "1"; //false
true == "hello"; //false
null == 0; //flase
undefined ==null; //true
NaN ==NaN; //false
七、全等和不全等运算e
- 不会类型转换,类型不同直接返回false。
八、三元运算符
- 条件表达式 ?语句1:语句2;
- true执行语句1,false执行语句2。
九、运算符的优先级
运算符 | 优先级 |
---|---|
. (点) 、[] 、new | 1 |
() | 2 |
++ 、- - | 3 |
!、~、+(单目)、-(单目)、typeof、void、delete | 4 |
<<、>>、>>> | 5 |
<、<=、>、>= | 6 |
== 、!== 、=== | 7 |
& | 8 |
^ | 9 |
| | 10 |
&& | 11 |
|| | 12 |
?: | 13 |
=、+=、-=、%=、<<=、>>=、>>>=、&=、^=、|= | 14 |
, (逗号) | 15 |
十、break和continue
- break和continue用来退出switch和循环语句。
- 不能用于if语句(在if语句中不起作用)
- break会立即终止离它最近的那个循环语句。
- continue跳出当次循环。
//跳出外层循环
outer:
for(let i=0;i<5;i++){
console.log("@外层循环"+i);
for(let j=0;j<5;j++){
break outer;
console.log("@内层循环"+j);
}
}
//@外层循环0