前言
这篇文章为我跟随pink老师重新系统学习前端时做的一些笔记。
系列文章
【HTML5篇】
D1:HTML简介与HTML标签
【CSS3篇】
D2:CSS入门
D2:CSS基础
D3:CSS进阶
D4:CSS提高
【JavaScript篇】
D1:JavaScript入门
D2:JavaScript基础
1 运算符
运算符(operator)也被称为操作符,适用于实现赋值、比较和执行算数运算等功能的符号。
JavaScript中常用的运算符有:
- 算术运算符
- 递增和递减运算符
- 比较运算符
- 逻辑运算符
- 赋值运算符
1.1 算术运算符
1.1.1 算术运算符概述
概念:算术运算使用的符号,用于执行两个变量或值的算数运算。
运算符 | 描述 | 实例 |
---|---|---|
+ | 加 | 10 + 20 = 30 |
– | 减 | 10 – 20 = -10 |
* | 乘 | 10 * 20 = 200 |
/ | 除 | 10 / 20 = 0.5 |
+% | 取余数(取模) | 返回除法的余数9 % 2 =1 |
console.log(1 + 1); // 2
console.log(1 - 1); // 0
console.log(1 * 1); // 1
console.log(1 / 1); // 1
console.log(4 % 2); // 0
console.log(5 % 3); // 2
console.log(3 % 5); // 3
1.1.2 浮点数的精度问题
浮点数的最高精度是17位数,但在进行算数计算时其精确度远远不如整数。
// 浮点数的算数运算会有问题
console.log(0.1 + 0.2); // 结果不是0.3,而是0.30000000000000004
console.log(0.07 * 100); // 结果不是7,而是7.00000000000000001
console.log(0.1 + 0.2 == 0.3); // false
不要直接判断两个浮点数是否相等。
1.1.3 表达式和返回值
表达式:是由数字、运算符、变量等以能求得数值的有意义排列方法所得的组合。简单理解就是由数字、运算符、变量等组成的式子。
表达式最终都会有一个结果返回,称为返回值。
1.2 递增和递减运算符
1.2.1 递增和递减运算符概述
如果需要反复给数字变量添加或减去1,可以使用递增(++)和递减(–)运算符来完成。
在JavaScript中,递增(++)和递减(–)既可以放在变量前面,也可以放在变量后面。放在变量前面时,称之为前置递减(递增)运算符;放在变量后面时,称之为后置递增(递减)运算符。
递增和递减运算符必须和变量配合使用。
1.2.2 递增运算符
-
前置递增运算符
++num前置递增,就是自加1,类似于num=num+1,但是++num写起来更简单。
先自加,后返值。 -
3.2.2 后置递增运算符(开发中常用)
num++前置递增,就是自加1,类似于num=num+1,但是++num写起来更简单。
先返值,后自加。var e = 10; var f = e++ + ++e; // 1. e++ = 10; e = 11; 2. e = 11; ++e = 12; console.log(f); // 10 + 12 = 22
1.2.3 前置递增和后置递增小结
- 前置递增和后置递增运算符可以简化代码的编写,让变量的值+1比以前的写法更简单。
- 单独使用时,运算结果相同。
- 与其他代码联用时,执行结果会不同。
- 后置:先原值计算,后自加(先人后己)。
- 前置:先自加,后运算(先己后人)。
1.3 比较运算符
概念:比较运算符(关系运算符)是两个数据进行比较时所用的运算符,比较运算后,会返回一个布尔值(true / false)作为比较运算的结果。
运算符名称 | 说明 | 案例 | 结果 |
---|---|---|---|
< | 小于号 | 1 < 2 | true |
> | 大于号 | 1 > 2 | false |
>= | 大于等于号(大于或者等于) | 2 >= 2 | true |
<= | 小于等于号(小于或者等于) | 3 <= 2 | false |
== | 判等号(默认准换数据类型,会把字符串型的数据转换为数字型) | 18 == ‘18’ | true |
!= | 不等号 | 37 != ‘37’ | false |
===、!== | 全等,要求值和数据类型都一致 | 37 === ‘37’ | false |
1.4 逻辑运算符
1.4.1 逻辑运算符概述
逻辑运算符是用来进行布尔值运算的运算符,其返回值也是布尔值。开发中常用于多个条件的判断。
逻辑运算符 | 说明 | 案例 |
---|---|---|
&& | “逻辑与”,简称“与”,and | true && false |
|| | “逻辑或”,简称“或”,or | true || false |
! | “逻辑非”,简称“非“,not | !true |
- 逻辑与:两边都是true才返回true,否则返回false
- 逻辑或:两边都为false才返回false,否则都为true
- 逻辑非:逻辑非(!)也叫作取反符,用来取一个布尔值相反的值,如true的相反值是false
1.4.2 短路运算(逻辑中断)(*)
短路运算的原理:当有多个表达式(值)时,左边的表达式值可以确定结果时,就不再继续运算右边的表达式的值。
- 逻辑与
语法:表达式1 && 表达式2- 如果第一个表达式的值为真,则返回表达式2
- 如果第一个表达式的值为假,则返回表达式1
- 逻辑或
语法:表达式1 || 表达式2- 如果第一个表达式的值为真,则返回表达式1
- 如果第一个表达式的值为假,则返回表达式2
var num = 0; console.log(123 || num++); // true,直接返回123,不计算num++ console.log(num); // 0
1.5 赋值运算符
概念:用来把数据赋值给变量的运算符。
赋值运算符 | 说明 | 案例 |
---|---|---|
= | 直接赋值 | var usrName = ‘我是值’ |
+=,-= | 加,减一个数后再赋值 | var age = 10; age+=5; // 15 |
*=,/=,%= | 成,除,取模后再赋值 | var age = 2; age*=5; // 10 |
1.6 运算符优先级
优先级 | 运算符 | 顺序 |
---|---|---|
1 | 小括号 | () |
2 | 一元运算符 | ++,–,! |
3 | 算数运算符 | 先 * /,后 + – |
4 | 关系运算符 | >,>=,<,<= |
5 | 相等运算符 | ==,!=,=,!== |
6 | 逻辑运算符 | 先&&,后||(先与后或) |
7 | 赋值运算符 | = |
8 | 逗号运算符 | , |
- 一元运算符里面的“逻辑非”优先级很高
- “逻辑与”比“逻辑或”优先级高
console.log( 4 >= 6 || '人' != '阿凡达' && !(12 * 2 == 144) && true)
// false || true && true && true
// false || true
// true
2 流程控制分支结构
流程控制就是控制代码按照什么结构顺序来执行。流程控制主要有三种结构,分别是顺序结构、分支结构和循环结构,这三种结构代表三种代码执行的顺序。
2.1 顺序流程控制
顺序结构式程序中最简单、最基本的流程控制。没有特定的语法结构,程序会按照代码的先后顺序依次执行。程序中的大多数的代码都是这样执行的。
2.2 分支结构
由上到下执行代码的过程中,根据不同的条件执行不同的路径代码(执行代码多选一的过程),从而得到不同的结果。
JS 语言提供了两种分支结构语句:
- if语句
- switch语句
2.2.1 if语句
- 单分支语句:
// 条件成立,执行代码,否则什么也不做 if (条件表达式) { // 条件成立执行的代码语句 }
- 双分支语句:
// 条件成立,执行if里面代码,否则执行else里面的代码 if (条件表达式) { // [如果]条件成立执行的代码 } else { // [否则]执行的代码 }
- 多分支语句:
if (条件表达式1) { // 语句1; } else if (条件表达式2) { // 语句2; } else if (条件表达式3) { // 语句3; } else { // 上述条件都不成立执行此处代码 }
2.2.2 三元表达式
有三元运算符组成的式子称为三元表达式。
语法结构:条件表达式? 表达式1 : 表达式2
执行思路:如果条件表达式为true,则返回表达式1的值;如果条件表达式为false,则返回表达式2的值。
2.2.3 switch语句
switch语句也是多分支语句,基于不同的条件来执行不同的代码。当要针对变量设置一系列的特定值的选项时,就可以使用switch。
switch (表达式) {
case value1:
// 表达式等于value1时要执行的代码
break;
case value2:
// 表达式等于value2时要执行的代码
break;
default:
// 表达式不等于任何一个value时要执行的代码
}
- 关键字switch后面括号内可以是表达式或值, 通常是一个变量
- 关键字case后跟一个选项的表达式或值,后面跟一个冒号
- switch表达式的值会与结构中的case的值做比较,如果存在匹配全等(===) ,则与该case关联的代码块会被执行,并在遇到break时停止,整个 switch 语句代码执行结束;如果所有的case的值都和表达式的值不匹配,则执行default 里的代码。
- 执行case里面的语句时,如果没有break,则继续执行下一个case里面的语句。
switch…case语句与if…else…语句的区别:
- 一般情况下,两个语句可以互相替换。
- switch…case语句通常处理case为比较确定值的情况,而if…else…语句更加灵活,常用于范围判断。
- switch…case语句进行条件判断后直接执行到程序的条件语句,效率更高。而if…else语句有几种条件,就得判断多少次。
- 当分支比较少时,if…else语句的执行效率比switch…case语句高;当分支比较多时,switch…case语句的执行效率比较高,而且结构更清晰。
2.3 循环
循环的目的:在实际问题中,有许多具有规律性的重复操作,因此在程序中要完成这类操作过就需要重复执行某些语句。
JS中,主要有三种类型的循环语句:for循环、while循环、do…while循环。
2.3.1 for循环
在程序中,一组被重复执行的语句被称之为循环体,能否继续重复执行,取决于循环的终止条件。由循环体及循环的终止条件组成的语句,被称之为循环语句。
for循环主要用于把某些代码循环若干次,通常跟计数有关系。
- 初始化变量:声明一个普通变量作为计数器。
- 条件表达式:决定每一次循环是否继续执行,即终止循环的条件。
- 操作表达式:每次循环最后执行的代码,常用于计数器变量的更新(递增或递减)。
for (初始化变量; 条件表达式; 操作表达式) {
// 循环体
}
2.3.2 断点调试
断点调试是指自己在程序的某一行设置一个端点,调试时程序运行到这一行就会停住,然后可以一步步往下调试,调试过程中可以看各个变量的当前值,出错的话,调试到出错的代码行即显示错误,停下。断点调试可以帮我们观察程序的运行过程。
断点调试的步骤:
- 浏览器中按F12 –> sources –> 找到需要调试的文件 –> 在程序的某一行设置断点(在行序号处单击)
- 刷新浏览器
- Watch:监视,通过watch可以监视变量的值的变化,或直接将鼠标放在变量上
- 按F11让程序单步执行,观察watch中变量的值的变化
2.3.3 双重for循环
很多情况下,单层for循环并不能满足需求。循环嵌套是指在一个循环语句中再定义一个循环语句的语法结构,例如在for循环语句中,可以再嵌套一个for 循环,这样的 for 循环语句我们称之为双重for循环。
for (外循环的初始; 外循环的条件; 外形循环的操作表达式) {
for (内循环的初始; 内循环的条件; 内循环的操作表达式) {
需执行的代码;
}
}
九九乘法表:
var str = '';
for (var i = 1; i <= 9; i++) {
for (var j = 1; j<= i; j++) {
str += j + '×' + i '=' + i * j;
}
str += '\n';
}
console.log(str);
2.3.4 while循环
while语句可以在条件表达式为真的前提下,循环执行指定的一段代码,直到表达式不为真时结束循环。
执行思路:
- 先执行条件表达式,如果结果为true,则执行循环体代码;如果为 false,则退出循环,执行后面代码;
- 执行循环体代码
- 循环体代码执行完毕后,程序会继续判断执行条件表达式,如条件仍为true,则会继续执行循环体,直到循环条件为false时,整个循环过程才会结束。
- 使用while循环时必须要有退出条件,否则会称为死循环。
- while循环和for循环的不同之处在于while循环可以做较为复杂的条件判断,比如判断用户名和密码。
while (条件表达式) {
// 循环体代码
}
2.3.5 do…while循环
do…while语句起始是while语句的一个变体。该循环会先执行一次代码块,然后对条件表达式进行判断,如果条件为真,就会重复执行循环体,否则退出循环。
执行思路:
- 先执行一次循环体代码
- 再执行表达式,如果结果为true,则继续执行循环体代码,如果为false,则退出循环,继续执行后面的代码
- 先执行再判断循环体,所以dowhile循环语句至少会执行一次循环体代码
do {
// 循环体
} while(条件表达式);
while循环:
var ans = prompt('How are you?');
while (ans != 'Fine. Thank you.') {
ans = prompt('How are you?');
}
alert('over');
do…while循环:
do {
var ans = prompt('How are you?');
} while (ans != 'Fine. Thank you.');
alert('over');
- for、while、do…while三个循环很多情况下都可以相互替代使用。
- 与计数或数字相关的需求,三者使用基本相同,但偏向使用for循环。
- while和do…while循环可以做更复杂的判断,比for循环灵活。
3 continue关键字
continue关键字用于立即跳出本次循环,继续下一次循环(本次循环体中continue之后的代码就会少执行一次)。
4 break关键字
break关键字用于立即跳出整个循环。
5 JavaScript命名规范及语法格式
5.1 标识符命名规范
- 变量、函数的命名必须要有意义
- 变量的名称一般用名词
- 函数的名称一般用动词
5.2 操作符规范
- 操作符的所有两侧各保留一个空格
5.3 单行注释规范
- 单行注释前面注意有个空格(虽然我更喜欢用tab键)
5.4 其他规范
- 如if…else语句、for循环语句等,if与(之间有个空格,)与{之间也有个空格
总结
因为已经有其他语言的基础了,所以觉得老师讲的大部分案例都很简单。老师讲得很仔细,要是我能早一点开始学(复习)就好了。这一篇没有什么难度,逻辑判断那里需要多加注意,比如==和===的区别。