运算符:也叫操作符,是一种符号。通过运算符可以对一个或多个值进行运算,并获取运算结果。
表达式:由数字、运算符、变量的组合(组成的式子)。
+:当+两边是数字时候,就是算数运算符,只要有一边不是数字,就是连接符
-,*,/
%:取模
<script>
var num = 567;
// 个位就是直接对10取模
var ge = parseInt(num % 10);
// 十位就是先/10在对10取模
var shi = parseInt(num / 10 % 10 );
// 百位就是先/100再对10取模
var bai = parseInt(num / 100 % 10);
console.log(`个位${ge}十位${shi}百位${bai}`);//个位7十位6百位5
</script>
必须是变量哦,不然会报错~!
<script>
var n = 3;
var m = 5;
var num1 = n++ + n++ + ++m + n-- - m++;
// 参与运算的值: n:3 n:4 m:6 n:5 m:6
// 自身值: n:4 n:5 m:6 n:4 m:7
var a = 4;
var b = 9;
var num2 = a++ - b++ + ++b + a++ + ++b + a++;
// 参与运算的值:a:4 b:9 b:11 a:5 b:12 a:6
// 自身值: a:5 b:10 b:11 a:6 b:12 a:7
console.log(num1);//12
console.log(num2);//29
</script>
返回的一定是布尔类型
包含隐式转换,非布尔类型的值会隐式转为布尔类型
表达式1 && 表达式2
逻辑短路:原理就是因为一假则假,代码从做到右执行,当执行到第一个表达式,如果表达式1为假,那么这个返回值一定是假,就睡返回表达式1,;如果表达式1位真,就睡继续往右判断表达式2,所以返回表达式2,因为表达式2的真假决定这的返回值的真假。
当表达式1的值为true,就返回表达式2的值
当表达式1的值为false,就返回表达式1的值
<script>
// 逻辑与短路:第一个值为false,后面的代码不会执行
false && alert(‘不会执行‘);
console.log(1 && 0);//0
// true && false => 表达式1的值为真,就直接返回表达式2的值
console.log(1 && 1 && 2 && 0 && 0);//0
//true && true && true && false => 当有2个以上表达时,会返回第一个为false的表达式
</script>
表达式1 ||表达式2
逻辑非短路:原理与逻辑与一致
当表达式1的值为false,就返回表达式1的值
当表达式1的值为true,就返回表达式2的值
// 逻辑或短路:第一个值为true,后面的代码不会执行
true || alert(‘不会执行‘);
console.log(1 || 0);//1
// true && false => 表达式1的值为真,就直接返回表达式1的值
console.log(0 || 0 || 2 || 0 || 0);//2
//false && false && true && false => 当有2个以上表达时,会返回第一个为true的表达式
非布尔值进行逻辑运算,会隐式转为布尔类型去判断, 但是原值不会改变!!!
var result = 5 && 6; // 运算过程:true && true;
console.log(‘result:‘ + result); // result:6(也就是说最后面的那个值。)
对一个布尔值进行取反。会隐式转换
=
:赋值运算符,将右边的值赋值给左边的 变量?,左边必须是变量,5 = 5,会报错
+=
a += 5 等价于 a = a + 5
-=
a -= 5 等价于 a = a - 5
*=
a *= 5 等价于 a = a * 5
/=
a /= 5 等价于 a = a / 5
%=
a %= 5 等价于 a = a % 5
返回的也是布尔类型
也会隐式转换
大于号
< 小于号
= ?大于或等于
<= ?小于或等于
== ?等于
=== 全等于
!= 不等于
!== 不全等于
<script>
console.log(1 > 2);//false
// 字符串会转为ASCII编码比较
console.log(‘a‘ > ‘A‘);//true
// 逐位比较
console.log(‘56‘ > ‘123‘);//true
console.log(‘小‘ > ‘艾‘);//false
// 任何值一NaN比较都是false
console.log(NaN > -9999999);//false
// ==并不严谨,会做隐式转换,将不同的数据类型,转为相同类型进行比较(大部分情况下,都是转换为数字)
console.log(1 == ‘1‘);//true
console.log(1 === ‘1‘);//false
// NaN不等于任何东东,包括他本身
console.log(NaN == NaN);//false
// undefined 衍生自 null,所以返回true
console.log(null == undefined);//true
//全等在比较时,不会做类型转换,开发常用===
console.log(null === undefined);//false
console.log(3 != 8); //true
console.log(3 != "3"); //false,因为3=="3"是true,所以反过来就是false。
console.log(3 !== "3"); //true,应为3==="3"是false,所以反过来是true。
</script>
条件表达式 ? 语句1 : 语句2;
首先判断条件表达式的值:
如果该值为true,则执行语句1,并返回执行结果
如果该值为false,则执行语句2,并返回执行结果
如果条件的表达式的求值结果是一个非布尔值,会将其转换为布尔值然后再运算。
<script>
// 需求:求三个数的最大值
// 1.获取用户输入内容,并转为Number类型
var a = +prompt(‘输入第一个数字‘);
var b = +prompt(‘输入第二个数字‘);
var c = +prompt(‘输入第三个数字‘);
// 2.定义一个最大值
var max;
// 如果a > b,就将a赋值给max,否则就将b赋值给max
// 在将max与c比较,如果max小于c就将c赋值给max
(max = a > b ? a : b) > c ? max : max = c;
alert(max);
</script>
优先级从高到低
、>=、<、<=
原文:https://www.cnblogs.com/xiaoaitongxue/p/12739589.html