目录
1,算术运算符
1.1,赋值运算符
赋值运算符(=),赋值:从右往左赋值,等号右边的值赋值给左边。
let num = 9;
js中的=、==、===的区别
=是赋值运算符,
==是判断值是否相等,
===是判断值和类型是否都相等(先比较值,后比较类型)。
1.2,加法运算符
加法运算符(+):用于求数值的和。
let num = 1 + 3 + 2;
console.log(num); //6
变量也可以通过表达式计算。
let num2 = num + num;
console.log(num2) //12
如果是两个字符串相加,这时加法运算符会变成连接运算符,代表字符串连接,将两个原字符串连接在一起。
let s1 ="12a";
let s2 ="b30";
let s3 =s1 + s2;
console.log(s3) //s3 = '12ab30'
如果一个运算子是字符串,另一个运算子是非字符串,这时非字符串会转成字符串,再连接在一起,组成新的字符串。
var s4 ="3" + 5;
console.log(s4); //35
加法运算符是在运行时决定,到底是执行相加,还是执行连接。也就是说,运算子的不同,导致了不同的语法行为,这种现象称为“重载”(overload)。
由于加法运算符存在重载,可能执行两种运算,使用的时候必须要注意。
let n1 = '3' + 4 + 5
console.log(n1) // "345"
let n2 = 3 + 4 + '5'
console.log(n2) // "75"
除了加法运算符,其他算术运算符(比如减法、除法和乘法)都不会发生重载。它们的规则是:所有运算子一律转为数值,再进行相应的数学运算。
1 - '2' // -1
1 * '2' // 2
1 / '2' // 0.5
1.3,减法运算符
减法运算符(-),用于计算两个数相减。
let num3 = 5 - 2;
console.log(num3); //num3 = 3
当参与运算的两个值其中只要有一个是字符串时,代码会将字符串转换为数字,然后进行数学相减(前提是字符串里面的内容可以转成数字)。
var num4 ="5" -3;
console.log(num4); //2
1.4,乘法运算符
乘法运算符(*),用于两数相乘。
不同的运算拥有不同的优先级,乘法运算的优先级大于加减。
let num5 = 5 * 6;
console.log(num5) //30
let num6 = 5 * 8 / 10;
console.log(num6) //4
当字符串参与乘法运算时。和减号遵循的规则一样。
当参与运算的两个值其中只要有一个是字符串时,代码会将字符串转换为数字,然后进行数学相乘((前提是字符串里面的内容可以转成数字)。
let n1 = "3" * 4 + 5;
console.log(n1); // 17
let n2 = 3 * 5 + "5";
console.log(n2); // "155"
//反例
let num6 = 'a12' * 5;
console.log(num6) //NaN
1.5,除法运算符
除法运算符(/),用于两数相除。
let num7 = 12 / 5;
console.log(num7) //2.4
当字符串参与除法运算时。和减号遵循的规则一样。
let num8 = '20' / 5;
console.log(num8) //4
1.6,余数运算符
余数运算符(%),两个数字整除之后的余数。
let num9 =40 % 13;
console.log(num9); //1
1.7,自增、自减运算符
自增(++),自减(–)运算符。
自增和自减运算符,是一元运算符,只需要一个运算子。
它们的作用是将运算子首先转为数值,然后加上1或者减去1。它们会修改原始变量。
let x = 12;
++x
console.log(x) //13
--x;
console.log(x) //12
自增/自减注意的地方:放在变量之后,会先返回变量操作前的值,再进行自增/自减操作;放在变量之前,会先进行自增/自减操作,再返回变量操作后的值。
let x = 5;
let y = 5;
const m1 = x++;
const m2 = ++y;
console.log("m1:" + m1); //5
console.log("m2:" + m2); //6
1.8,组合运算符
(+=)表示自增运算 同样还有(-=),(*=),(/=)。
let value =10;
/* value+=5,等同于value = value + 5*/
value+=5;
console.log(value); //15
2,逻辑运算符
2.1,和运算
和运算(&&):当运算符两侧的表达式都为真时,结果才为真
,反之任意表达式的值为false时,则整个表达式的结果都为false。
只要遇到表达式的结果是 false,就会短路,短路后不会继续往下执行。然后得到造成短路的这个值,如果不短路,得到的是第二个值。
console.log(1 && 2) //2
console.log(1 && 0) //0
console.log(0 && 1) //0
console.log(null && undefined) //null
2.2,或运算
或运算(||):只要任意表达式为 true,则整个表达式的运算结果为 true
。
只要遇到表达式的结果是true,就会短路,短路后不会继续往下执行。然后得到造成短路的这个值,如果不短路,得到的是第二个值。
console.log(1|| 2) //1
console.log(1 || 0) //1
console.log(0 || 1) //1
console.log(null && undefined) //null
2.3,非运算
非运算(!),是一个单目运算符,对布尔值进行取反,假的取真,真的取假。
非运算的优先级大于和运算、或运算。
var f3 = !true;
console.log(f3); //false
3,比较运算符
var a =6; var b =5;
// 两个变量进行比较,会得到一个布尔值的结果,不等式成立时为true 不成立则为false
// <小于(左侧小于右侧), >大于
var f1 =a<b;
// >=大于等于 <=小于等于 规则和大于小于一样
var f2 = a>=b;
// !=不等于
var f3 = a!=b;
比较运算符会组成一个表达式,无论这个表达式有多长,系统再去运行的时候始终会把该表达式的结果以一个bool值来返回出来。
4,三元运算符
三元运算符是一种需要三个操作数的运算符,运算的结果根据给定条件决定。
格式:条件表达式 ?表达式1 : 表达式2。
运算规则:当条件表达式为true,返回表达式1;反之则返回表达式2。
let a = 20;
let b = 10;
console.log(a>b?a:b); //20
嵌套使用
let one = 2956;
let two = 3576;
let three = 6011;
console.log(one < 3000 ? "贫困" : one < 6000 ? "正常" : "小康"); //贫困
console.log(two < 3000 ? "贫困" : two < 6000 ? "正常" : "小康"); //正常
console.log(three < 3000 ? "贫困" : three < 6000 ? "正常" : "小康"); //小康