运算符
1、算数运算符
含义:
数学运算符也叫算术运算符,主要包括加、减、乘、除、取余(求模)。
作用:
实现数字之间的数学计算。
常见属性:
+:求和;
-:求差;
*:求积;
/:求商;
%:取余,主要用来判断某个数字是否能被整除。
使用方法:
let a, b, c;
a = 100;
b = 100;
c = a + b;
alert(c);//200
注意:
算数运算符有优先级顺序:
- 乘、除、取余优先级相同;
- 加、减优先级相同;
- 乘、除、取余优先级大于加、减;
- 使用 () 可以提升优先级;
- 总结: 先乘除后加减,有括号先算括号里面的。
2、赋值运算符-进阶
含义:
对变量进行赋值的运算符,相当于常规运算符‘=’的进阶;
例:(num3 += 1;和num3 = num3 + 1;)它俩是一样的。
属性:
+=;
-=;
*=;
/=;
%=。
作用&使用方法:
作用:简化代码;
例如:
<script>
/* 使用常规赋值运算符‘=’给变量进行加1操作 */
let num2 = 1;
num2 = num2 + 1;
console.log(num2);//2
/* 使用改进后的赋值运算符‘+=’给变量进行加1操作 */
let num3 = 1;
num3 += 1;//和num3 = num3 + 1;一样
console.log(num3);//2
</script>
优点:
使用这些运算符可以在对变量赋值时进行快速操作,使代码更简洁。
3、一元运算符
含义:
正负号、自增、自减都是一元运算符(这里主要讲自增或自减),
自增或自减只会自增’ 1 ‘或自减’ 1 ‘;
例: ‘i++‘,i++=i+1。
作用&使用方法:
作用:简化代码;
例如:
<script>
/* 常规的加1操作 */
let num2 = 1;
num2 = num2 + 1;
console.log(num2);//2
/* 使用自增自减的加1操作 */
let num3 = 1;
num3++;
console.log(num3);//2
</script>
-----(一般用于循环语句中)
属性:
后置自增:i++、i--;
前置自增:++i、--i。
注意:
后置自增和前置自增存在区别:
-
它两单独存在时,执行结果是一样的;
-
但,当它们处在一个表达式或语句里,它两的结果就存在区别;例:‘i++’是先执行表达式或语句,再执行自增加1 的操作;而‘++i’是先执行自增加1的操作,然后再执行表达式或语句,代码如下:
<script> /* i++ */ let a = 1, sum1 = 1; sum1 = sum1 + (a++);//a先进行计算,再自增 加1 console.log(sum1);//2 /* ++i */ let b = 1, sum2 = 1; sum2 = sum2 + (++b);//b先自增 加1,再进行计算 console.log(sum2);//3 </script>
优点:
使变量加1或减1的代码更简洁。
缺点:
自增或自减只会自增’ 1 ‘或自减’ 1 ‘。
4、比较运算符
含义:
对两个数据进行比较,比较结果为boolean类型,返回值为true或false。
属性:
'>': 左边是否大于右边;
'<': 左边是否小于右边;
'>=': 左边是否大于或等于右边;
'<=': 左边是否小于或等于右边;
'==': 左右两边是否相等,将两边的数据进行转换为数字类型进行比较;
'===': 左右两边是否类型和值都相等;
'!=':左右两边是否不相等,将两边的数据进行转换为数字类型进行比较;
'!==': 左右两边是否不全等。
= 和 == 和 === 怎么区别?
= 是赋值; == 是判断 只要求值相等,不要求数据类型一样,即可返回true; === 是全等 要求值和数据类型都一样返回的才是true。 ------开发中,请使用 ===
使用方法:
<script>
let i = 1, u = 2;
alert(i < u);//true
alert(i > u);//false
</script>
注意:
1、字符串的比较,是比较字符对应的ASCII码;
-
从左往右依次比较;
-
如果第一位一样再比较第二位,以此类推;
2、NaN不等于任何值,包括它本身;
3、尽量不要比较小数,因为小数有精度问题;
4、不同类型之间比较会发生隐式转换,
- 最终把数据隐式转换转成number类型再比较;
- 所以开发中,如果进行准确的比较我们更喜欢 === 或者 !==
5、逻辑运算符
作用:
解决由多个条件共同判断的问题。
属性:
使用方法:
注意:
- 逻辑运算符的最终运算结果是最后执行表达式的值;
- undefined、null、0、” “、false、NaN:转为布尔类型,值为false;
拓展:
逻辑运算符里的短路:
短路:只存在于 && 和 || 中,当满足一定条件会让右边代码不执行;
原因:
- 通过左边能得到整个式子的结果,因此没必要再判断右边;
运算结果:
- 无论 && 还是 || ,运算结果都是最后被执行的表达式值,一般用在变量赋值
6、运算符优先级
注意:
- 一元运算符里面的逻辑非优先级最高。
语句
程序三大流程控制语句:
表达式和语句
介绍:
表达式: 是一组代码的集合,JS解释器会将其计算出一个结果。
语句: JS整句或命令,JS语句是以分号结束(可以省略),比如:if语句;for循环语句。
两者区别:
语句是可以单独执行的、能够产生实际效果的代码;而表达式则是包含在语句中,根据某种条件计算出一个值或得出某种结果,然后由语句去判断和处理的代码。
例如:a=1,这就是一个语句,目的是把1赋值给变量a,执行这条语句后,a的值就变为1,而不管它原来是什么值; if a == 1 then … 这里的a=1则是一个表达式,它本身并不会产生任何动作,而只是把变量a的值和1进行比较,然后把比较结果交给if语句去处理。
-----其实某些情况,也可以把表达式理解为语句,因为它是在计算结果,也是做事 。
分支语句
含义: 有的时候要根据条件选择执行代码,这种就叫分支结构。
if分支语句
单分支if语句
含义:
处理单一判断,当满足条件,执行if里面的内容,如果不满足,则跳过if语句。
语法:
if(条件){
满足条件要执行的代码;
}
小括号内的结果若不是布尔类型时,会发生隐式转换转为布尔类型。
问:假如我有满足if条件执行一种代码,不满足if条件执行另一种代码的需求,我能利用单if语句来实现吗?
答:不能,因为单if语句虽然满足条件会有一种代码,但是,它还是会继续向下执行另一种代码,那就达不到要求,但是双分支if语句可以做到。
图解:
双分支if else语句
含义:
它比单if语句多了else语句,表示意思为,当不满足if的条件,则执行else里的内容。通俗的讲,如果不执行if语句,就执行else语句;执行if语句,就不执行else语句。
作用:
解决了两种条件,两种代码的需要。
语法:
if(条件){
满足条件要执行的代码;
}
else{
不满足条件执行的代码;
}
缺点:
不能满足多个条件,多种代码的需要。
多分支if语句
作用:
解决了多种条件,多种代码的需要。
语法:
if(条件1){
代码1;
}else if(条件2){
代码2;
}else if(条件3){
代码3;
}else{
代码n;
}
例子:
12点以前, 输出上午好; 18点以前, 输出下午好; 20点以前, 输出晚上好。
三元运算符
介绍:
其实是比 if 双分支 更简单的写法,有时候也叫做三元表达式。
语法:
作用:
一般用来取值。
循环语句
断点调试
含义:
在某句代码上加的标记就叫断点,当程序执行到这句有标记的代码时会暂停下来。
作用:
学习时可以帮助更好的理解代码运行,工作时可以更快找到bug。
使用步骤:
浏览器打开调试界面
- 按F12打开开发者工具;
- 点到sources一栏;
- 选择代码文件;
- 选择断点;
- 运行代码;
- 查看结果。
while循环
含义:
满足条件,重复执行代码。
释义:
跟if语句很像,都要满足小括号里的条件为true才会进入执行代码; 但while大括号里代码执行完毕后不会跳出,而是继续回到小括号里判断条件是否满足,若满足又执行大括号里的代码,然后再回到小括号判断条件,直到括号内条件不满足,即跳出。
语法:
while (循环条件) {
要重复执行的代码(循环体);
}
while 循环注意事项:
循环的本质就是以某个变量为起始值,然后不断产生变化量,慢慢靠近终止条件的过程。所以,循环需要具备三要素:
for循环
含义:
满足条件,重复执行代码。
语法:
for(声明记录循环次数的变量; 循环条件 ; 变化值){
循环体;
}
优点:
把声明起始值、循环条件、变化值写到一起,让人一目了然
for循环和while循环有什么区别呢:
当如果明确了循环的次数的时候推荐使用for循环; 当不明确循环的次数的时候推荐使用while循环
退出循环
continue
含义:
结束本次循环,继续下次循环。
break
含义:
跳出所在的循环。
循环嵌套
含义:
一个循环里再套一个循环,一般用在for循环里;
语法:
总结
[思维导图](js基础知识 ProcessOn Mind)