这是我参与8月更文挑战的第14天,活动详情查看:8月更文挑战
计算机程序一般是指能够被计算机执行的一些列指令的集合。在编程语言中,这些指令被称为语句,JavsScript程序就是一系列的JavaScript语句集合。JavaScript 语句向浏览器发出的命令,告诉浏览器该做什么。
JavaScript 遵循了一般编程语言的“语句 - 表达式”结构,在 JavaScript 标准中,把语句分成了两种:声明和语句。下面就一起来看看JavaScript的语句家族吧。

普通语句
条件语句
if语句
语法
if(expr)
statement


作用
在满足条件时执行它的内容语句,这个语句可以是一个语句块,这样就可以实现有条件地执行多个语句;
else 结构
if 语句还有 else 结构,用于不满足条件时执行;常见的用法是,利用语句的嵌套能力,把 if 和 else 连写成多分支条件判断;


switch 语句
switch 语句继承自 Java,Java 中的 switch 语句继承自 C 和 C++,原本 switch 语句是跳转的变形。
-
如果要用它来实现分支,必须要加上 break。
** 看以下示例**
如果不加break,它把满足条件及后面的都执行了

正确做法

循环语句
while 循环
- 条件为真
- 执行语句
- 返回条件继续判断
- 直到条件为假,跳出循环

如以下示例
当为0时,条件为假,停止执行;

do while 循环
-
执行语句(至少执行一次)
-
条件为真
-
j继续执行语句
-
返回条件继续判断
-
直到条件为假,跳出循环

如以下示例
条件是a要小于10,如果不满足,但还是执行了一次;

for循环
更简洁的循环结构。
语法格式
for (expr1;expr2;expr3)
statement
其他
-
for 语句中 3 个表达式都可以为空,或者包括以逗号分隔的多个子表达式
-
expr2 为空,会默认其值为真,意味着将无限循环下去。
-
除了 expr2 表达式结束循环外,也可以在循环语句中使用 break 语句结束循环。

for in
for/in 语句是 for 语句的一种特殊形式
语法格式
for ( [var/let] variable in <object | array)
statement
- variable 变量—》可用var/let来直接声明变量名
- in 后面为【对象】或【数组】
- 在遍历对象或数组过程中,把取到的每一个值赋值给 variable。
- 【数组】variable是数组下标
- 【对象】variable是对象的属性名
注
- 如果对象属性被设置为只读、存档或不可枚举等限制特性,那么使用 for/in 语句将无法枚举。
如以下示例
给对象obj添加了一个,enumerable 为 false,即不可枚举的属性c,当用 for in 循环枚举打印时,并没有被打印出来。

- 遍历的结果不一定根据定义时的顺序输出,有浏览器的最新版本现在都按chrome执行,先把当中的非负整数键提出来,排序好输出,然后将剩下的定义时的顺序输出,【所以如果对顺序有要求,则不要把键值定义为纯数字】。
for of
for of是ES6新增的循环方法
- 不能直接用于遍历对象
- 它背后的机制是
iterator 机制
可以给任何一个对象添加 iterator,使它可以用于 for of 语句
如以下 (此示例无实际意义)
- 可以实现自定义规则的对【对象内部】数据的【遍历】
let people={
name:'Axjy',
mood:['happy','bad','nice','energetic'],
[Symbol.iterator](){
const _this=this;
let index=0;
return {
next(){
if(index<_this.mood.length){
return {
value:_this.mood[index++],
done:false
}
}else{
return {
value:undefined,
done:true
}
}
}
}
}
};

实际操作中,我们一般不需要这样定义 iterator,我们可以使用 generator function
如以下(此示例无实际意义)

for await of 循环
JavaScript 还为异步生成器函数配备了异步的 for of
如以下示例
定义一个异步生成器函数,异步生成器函数每隔一秒生成一个数字,这是一个无限的生成器。这个无限循环的代码可以用于显示时钟等有意义的操作。
function sleep(duration) {
return new Promise(function(resolve, reject) {
setTimeout(resolve,duration);
})
}
async function* foo(){
i = 0;
while(true) {
await sleep(1000);
yield i++;
}
}
for await(let e of foo())
console.log(e);
异常和错误
try/throw语句
try /throw 语句用于处理异常;
try {
throw new Error("error");
} catch(e) {
console.log(e);
} finally {
console.log("finally");
}
一般来说,throw 用于抛出异常,但是单纯从语言的角度,我们可以抛出任何值,也不一定是异常逻辑,但是为了保证语义清晰,不建议用 throw 表达任何非异常逻辑。
- try 语句用于捕获异常,用 throw 抛出的异常,可以在 try 语句的结构中被处理掉,try 部分用于标识捕获异常的代码段;
- catch 部分用于捕获异常后做一些处理
- finally 部分用于执行后做一些必须执行的清理工作。
调试语句
debugger语句
debugger 语句的作用是:通知调试器在此断点
控制型语句
break 语句
break 语句用于跳出循环语句或者 switch 语句
-
有带标签的用法,可以控制自己被外层的哪个语句结构消费

continue 语句
continue 语句用于结束本次循环并继续
- 有带标签的用法,可以控制自己被外层的哪个语句结构消费

其他
语句块
语句块就是一对大括号;
语句块的好处和意义
- 让我们可以把多行语句视为同一行语句,让if、for 等语句定义起来可以比较简单。

注
语句块会产生作用域;如以下当尝试在【语句块】外访问【语句块】内let定义的声明时,就报错了。

空语句
空语句就是一个独立的分号,实际上没什么大用。
-
空语句的存在仅仅是从语言设计完备性的角度考虑,允许插入多个分号而不抛出错误。

return 语句
return 语句用于函数中,它终止函数的执行,并且指定函数的返回值
- 它后面可以跟一个表达式
声明型语句
var语句
古典的 JavaScript 中声明变量的方式。现在,在绝大多数情况下,let 和 const 是更好的选择。
-
声明同时必定初始化;
-
尽可能在离使用的位置近处声明;
-
不要在意重复声明。
let语句 和 const语句
let 和 const 是都是变量的声明,let 和 const 的作用范围是 if、for 等结构型语句。
class 声明
- class 最基本的用法只需要 class 关键字、名称和一对大括号
- 它的声明特征跟 const 和 let 类似,都是作用于块级作用域
- 预处理阶段则会屏蔽外部变量。
class a {
}
class 内部,可以使用 constructor 关键字来定义构造函数。还能定义 getter/setter 和方法。
class Rectangle {
constructor(height, width) {
this.height = height;
this.width = width;
}
// Getter
get area() {
return this.calcArea();
}
// Method
calcArea() {
return this.height * this.width;
}
}
函数声明
普通函数声明
function foo(){
}
async函数声明
async function foo(){
await sleep(3000);
}
generator函数声明
function* foo(){
yield 1;
yield 2;
yield 3;
}
async generator函数声明
async function* foo(){
await sleep(3000);
yield 1;
}
结语
注:以上示例只是用于理解概念
如以上有错误的地方,请在评论区中指出!
小可爱看完点个赞再走吧!😗