什么是语句和表达式

JavaScript 程序的执行单位为行(line),也就是一行一行地执行。

一般情况下,每一行就是一个语句。

语句(statement)是为了完成某种任务而进行的操作,比如下面就是一行赋值语句。

  1. var a = 1 + 3;

1 + 3叫做表达式(expression),指一个为了得到返回值的计算式。

语句和表达式的区别在于

前者主要为了进行某种操作,一般情况下不需要返回值;

后者则是为了得到返回值,一定会返回一个值。


语句以分号结尾,一个分号就表示一个语句结束。多个语句可以写在一行内。

  1. var a = 1 + 3 ; var b = 'abc';

表达式不需要分号结尾。
一旦在表达式后面添加分号,则 JavaScript 引擎就将表达式视为语句,这样会产生一些没有任何意义的语句。

  1. 1 + 3;
  2. 'abc';

标识符的规则

标识符(identifier)指的是用来识别各种值的合法名称。

简单说,标识符命名规则如下。

  • 第一个字符,可以是任意 Unicode 字母(包括英文字母和其他语言的字母),以及美元符号($)和下划线(_)。
  • 第二个字符及后面的字符,除了 Unicode 字母、美元符号和下划线,还可以用数字0-9
  • 标识符不能是关键字或保留字。

下面这些都是合法的标识符。

  1. arg0
  2. _tmp
  3. $elem
  4. π

下面这些则是不合法的标识符。

  1. 1a // 第一个字符不能是数字
  2. 23 // 同上
  3. *** // 标识符不能包含星号
  4. a+b // 标识符不能包含加号
  5. -d // 标识符不能包含减号或连词线

中文是合法的标识符,可以用作变量名。

  1. var 临时变量 = 1;

while语句

while语句的语法结构如下:

  1. while (条件表达式) {
  2. // 循环体代码
  3. }

执行思路:

  • 先执行条件表达式,如果结果为 true,则执行循环体代码;如果为 false,则退出循环,执行后面代码。
  • 执行循环体代码。
  • 循环体代码执行完毕后,程序会继续判断执行条件表达式,如条件仍为true,则会继续执行循环体,直到循环条件为 false 时,整个循环过程才会结束。

注意:

  • 使用 while 循环时一定要注意,它必须要有退出条件,否则会成为死循环

for 循环语句

语法结构:

  1. for(初始化变量; 条件表达式; 操作表达式 ){
  2. //循环体
  3. }
名称 作用
初始化变量 通常被用于初始化一个计数器,该表达式可以使用 var 关键字声明新的变量,这个变量帮我们来记录次数。
条件表达式 用于确定每一次循环是否能被执行。如果结果是 true 就继续循环,否则退出循环。
操作表达式 用于确定每一次循环是否能被执行。如果结果是 true 就继续循环,否则退出循环。

执行过程:

  1. 初始化变量,初始化操作在整个 for 循环只会执行一次。

    b. 执行条件表达式,如果为true,则执行循环体语句,否则退出循环,循环结束。

  1. 执行操作表达式,此时第一轮结束。
  2. 第二轮开始,直接去执行条件表达式(不再初始化变量),如果为 true ,则去执行循环体语句,否则退出循环。
  3. 继续执行操作表达式,第二轮结束。
  4. 后续跟第二轮一致,直至条件表达式为假,结束整个 for 循环。


  1. // 基本写法
  2. for(var i = 1; i <= 10; i++){
  3. console.log('媳妇我错了~');
  4. }

image.png


if else 语句

如果··那么就··

由上到下执行代码的过程中,根据不同的条件,执行不同的路径代码(执行代码多选一的过程),从而得到不同的结果

  1. // 条件成立 执行 if 里面代码,否则执行else 里面的代码
  2. if (条件表达式) {
  3. // [如果] 条件成立执行的代码
  4. } else {
  5. // [否则] 执行的代码
  6. }

执行的流程

  1. ![image.png](https://cdn.nlark.com/yuque/0/2020/png/1557656/1595990315266-f0bfb874-2e95-4b11-b0f3-9be097dde94a.png#align=left&display=inline&height=362&margin=%5Bobject%20Object%5D&name=image.png&originHeight=362&originWidth=259&size=11881&status=done&style=none&width=259)<br />-----------------------------------------------------------------------

continue、break

continue 关键字用于立即跳出本次循环,继续下一次循环
(本次循环体中 continue 之后的代码就会少执行一次)。

例如,吃5个包子,第3个有虫子,就扔掉第3个,继续吃第4个第5个包子,其代码实现如下:

  1. for (var i = 1; i <= 5; i++) {
  2. if (i == 3) {
  3. console.log('这个包子有虫子,扔掉');
  4. continue; // 跳出本次循环,跳出的是第3次循环
  5. }
  6. console.log('我正在吃第' + i + '个包子呢');
  7. }

运行结果:
image.png
—————————————————————————————————

break 关键字用于立即跳出整个循环(循环结束)。

例如,吃5个包子,吃到第3个发现里面有半个虫子,其余的不吃了,其代码实现如下:

  1. for (var i = 1; i <= 5; i++) {
  2. if (i == 3) {
  3. break; // 直接退出整个for 循环,跳到整个for下面的语句
  4. }
  5. console.log('我正在吃第' + i + '个包子呢');
  6. }

运行结果:

image.png


标签(label)

JavaScript 语言允许,语句的前面有标签(label)
相当于定位符,用于跳转到程序的任意位置,标签的格式如下。

  1. label:
  2. 语句

标签可以是任意的标识符,但不能是保留字,语句部分可以是任意语句。

标签通常与break语句和continue语句配合使用,跳出特定的循环。

  1. top:
  2. for (var i = 0; i < 3; i++){
  3. for (var j = 0; j < 3; j++){
  4. if (i === 1 && j === 1) break top;
  5. console.log('i=' + i + ', j=' + j);
  6. }
  7. }
  8. // i=0, j=0
  9. // i=0, j=1
  10. // i=0, j=2
  11. // i=1, j=0

上面代码为一个双重循环区块,break命令后面加上了top标签(注意,top不用加引号),满足条件时,直接跳出双层循环。

如果break语句后面不使用标签,则只能跳出内层循环,进入下一次的外层循环。

标签也可以用于跳出代码块。

  1. foo: {
  2. console.log(1);
  3. break foo;
  4. console.log('本行不会输出');
  5. }
  6. console.log(2);
  7. // 1
  8. // 2

上面代码执行到break foo,就会跳出区块。

continue语句也可以与标签配合使用。

  1. top:
  2. for (var i = 0; i < 3; i++){
  3. for (var j = 0; j < 3; j++){
  4. if (i === 1 && j === 1) continue top;
  5. console.log('i=' + i + ', j=' + j);
  6. }
  7. }
  8. // i=0, j=0
  9. // i=0, j=1
  10. // i=0, j=2
  11. // i=1, j=0
  12. // i=2, j=0
  13. // i=2, j=1
  14. // i=2, j=2

上面代码中,continue命令后面有一个标签名,满足条件时,会跳过当前循环,直接进入下一轮外层循环。如果continue语句后面不使用标签,则只能进入下一轮的内层循环。