JavaScript(二)——逻辑和运算符
前言
本篇笔记把原本应该和上一篇笔记中剩余的运算符放在这一篇笔记中来说明。至于目的,但这篇笔记的标题就很明确了,剩下的比较运算符和逻辑运算符要和编程时的逻辑一起说明。
文章目录
运算符(续)
补充说明运算符
++ (自增运算符)
let num = 1;
document.write(num ++); // 1、输出结果为 1
document.write(++ num); // 2、输出结果为 3
上述代码中表述出自增运算符(自减运算符也是同理)与符号放置的位置有很大关系,具体说明如下:
- 自增(自减)运算符放置在变量左边,表示先自增,再进行其他操作。所以标号1的代码先输出num后,再进行自增操作;标号为2 的代码是先对num进行自增操作,然后再将num输出;
- 所以在算式中运行的过程中需要注意自增符号的位置,具体如下:
let num = 1;
let sum = num ++ + 1 + ++ num + num; // 结果为 8
具体运算逻辑如下:
- num ++ + 1:首先是num + 1 结果为2 ,计算完成后对num进行自增操作,此时num为 2;
- 2 + ++ num: 第一步结果得出2 后,在这一步需要先对num进行自增操作,此时num为 3 ,所以第二步结果为5;
- 最后 + num : 上一步结果为 5 ,且num结果为 3,所以最终算式结果为 8。
比较运算符、逻辑运算符
比较运算符
比较运算符中的大于、小于等比较运算符的运算结果是布尔值,如下:
let num1 = 1, num2 = 2;
document.write(num1 > num2); // 结果为false,表示 num1 不大于 num2
document.write(num1 < num2); // 结果为true,表示num1 小于 怒=num2
同时比较运算符不单单可以比较数字的大小,字符以及字符串也可以比较,但是字符和字符串之间的比较运算依据的是字符的ASCII
码的码值(感兴趣的同学可以先自行搜索学习,后期会简单说明)。
let char1 = 'a', char2 = 'b';
document.write(char1 < char2); // 结果为true
【注】:比较运算符中的大于等于、小于等于等比较运算符的表示为:
// 大于等于
>=
// 小于等于
<=
// 恒等于(比较二者的值是否相同)
==
// 比较二者的值和地址是否相同
===
逻辑运算符
计算机中的基本逻辑运算包含以下三种:
- 与运算:&&,被&&连接的两个判别式都为真,整个判别式才为真;
- 或运算:||,被||连接的两个判别式只要有一个为真,整个判别式就可以为真;
- 非运算:!,表示取反。
以上说明的是简单说明,在实际应用中还有更加深奥的用法(一般在设计算法的时候经常会用到)
《关于逻辑运算符在大学期间人畜无害但在工作后背刺我这件事》
大学期间仅仅认真在课堂上听老师讲课以及背题库应付老师讲课的同学多半不会了解这部要人命的新番,大家了解的都是一些小口诀:全真为真,全假为假……。
然而这些都是背抽象出来仅表述了逻辑运算符得结果展示方面,实际上逻辑运算符藏得很深,它的底层一直等待着一个机会在背后捅你一刀……,本篇笔记稍微记录一下底层运行的逻辑。
(PS:本来在Java笔记中就想直接说明底层,但思考再三觉得还是不要给入门的同学加门槛了,所以放在这里进行说明,反正了解过算法或工作过的朋友都知道这个知识点,嘿嘿)。
好了,话不多说,具体如下:
- 与运算
let num = 1 && 2;
// 执行到该语句时会先检查 && 前的判别式(表达式)是否为真,如果为真,则继续向后检查,如果只有两个表达式,则会直接将第二个表达式的值作为返回值返回。
let num2 = 1 && 2 && 3 && ... && n;
// 在判别式(表达式)超过两个的时候,只要第一个判别式(表达式)为真,则会一次阅读后面的所有表达式,知道阅读到的第一个假值后,将该值返回。
// 如果第一个表达式为假值,则会直接将第一个表达式的值返回。
在了解到上面的运行逻辑后,我们来说一说 && 运算符的独特用法:
短路
let flag = true;
flag && document.write("如果flag的值为真,则可以执行这一句");
- 或运算
let num = 1 || 2;
document.write(num); // 结果为 1
// 或运算和与运算正好相反,它只会找真值。以上面的表达式举例子:判断 1 是否为真,如果为真则直接返回 1;如果第一个表达式不为真,且只有两个表达式,则直接返回第二个表达式的值。
// 同时,如果或运算的表达式有很多,则会一直寻找那个真值并返回;如果没有真值则会一直寻找到最后一个表达式,并将最后一个表达式的值返回。
**【注】:**这个运算方式可以和设计模式中的职责链来进行分析。
- 非运算
let param1 = !111; // 表示取反为布尔值,结果为false
let param2 = !null; // 取反后表示 非空, true
let param3 = !!null; // 表示null本身的布尔值
【注】:进行判断的时候,是将表达式的值转换为 布尔值 后再进行篇判断。
补充细节:以下的值转换为布尔值时都为false:
- undefined;
- null;
- NaN;
- “”;该值表示空串;
- 0;
- false。
条件语句、循环语句
了解上述运算符之后,开始了解条件语句和循环语句。
条件语句
条件语句的含义是当满足某种条件之后,开始执行某些语句。一般来说,最常用的就是if语句
以及if...else..
语句,具体使用如下:
let flagNum = 12;
if(flagNum >50){
document.write("flagNum的值大于 50 ");
}else{
document.write("flagNum的值小于 50 ");
}
**【注】:**if语句的具体解释如下:
- if语句的参数中放入表示判定的表达式,当表达式为真则执行if语句下的代码块;
- if语句下被花括号包围的是if的代码块;
- 如果多个if语句没有else语句配合使用,则会逐个执行,知道最后一个if语句判别结束;
- else语句只会与和自己平级且最近的if语句配合。
循环语句
循环语句就是设定一个规则,只要在规则通过的前提下,循环语句包围的代码块会多次执行,直到规则判定不通过。
for循环
// 100以内的整数和
let sum1 = 0;
for(let start = 0; start <= 100; start ++){
sum1 += start;
}
document.write("从1加到100的结果为" + sum);
// 100以内的偶数和
let sum2 = 0
for(let start = 0; start <= 100; start ++){
if(!(start % 2)){
sum2 += start;
}
}
document.write(sum2);
while循环
while(判别式(表达式)){
执行的代码块;
}
// do...while 表达式
let count = 0;
do{
document.write(count + ' ');
count ++;
}while(count < 100);
总结
本篇笔记中记录了条件语句和循环语句,同时也对《关于逻辑运算符在大学期间人畜无害但在工作后背刺我这件事》进行了简单地解释,大家感兴趣的话可以在力扣上做一下算法题,从中可以获得一些新的思维逻辑,同时还可以多了解一些知识点。