在 JavaScript 中,语句可以采用单行形式,也可以使用一对大括号 {} 括起来的复合语句。语句之间通过语法符号(分号)进行分隔,同时某些语句也具有返回值。常见的语句类型包括声明语句、表达式语句、分支语句、循环语句、控制结构以及其他类型的语句。了解这些语句类型对于编写高质量的 JavaScript 代码非常重要。表达式语句
什么是表达式?表达式是由一系列的操作符、变量、常量、函数调用,组成的代码,它可以是简单的值(数字、字符串),也可以是复杂的计算式(数学运算、函数调用),它可以计算出一个值。
上面的代码是单值表达式,因为 2 是一个单值,所以它是一个单值表达式。
str = \\\'test string\\\';
3 + 4 // 返回 7
\\\"Hello\\\" + \\\" \\\" + \\\"World\\\" // 返回 \\\"Hello World\\\"
(5 * 10) / 2 // 返回 25
Math.pow(2, 3) // 返回 8
JavaScript 中的函数本身就是一个变量/值,因此函数调用其实也是一个表达式:
变量声明语句
在引擎层面,JavaScript 是将上面的语句分为「变量声明、赋值语句」,两个不同的阶段去处理。
其中,let abc 作为变量声明,在语法解析阶段就被处理,执行环境中有了 abc 的变量名,而 abc = ‘string’ 在执行阶段处理,通过赋值操作向变量名 abc 绑定具体的值。
在JavaScript 中,所有显示声明的数据都是按这种处理方式实现的,包括 let、var、const、函数声明等。
for (var prop in obj){
//...
}
上面代码中 var 声明的变量作用域是在函数一级,不是当前的{}语句块。
var prop;
for (prop in obj){
//...
}
上面两个 for 循环的 var 变量声明语句,没有区别,prop 的作用域在全局。
如果使用 let 或者 const 声明的话,变量声明是在当前语句的块级作用域中:
for (let prop in obj){
//prop 的作用域范围
}
if (condition)
statement1
[else statement2];
当 condition 语句成立时,执行 statement1,否则执行 statement2。
当没有 else 语句时,则 condition 条件不成立时,什么也不做。
对于 if … else if … 语句来说,这样的格式是一种语法的变种,只不过 else 是子句中的 statement2 是一个新的、单行的 id 语句而已。
if (condition1){
//执行
} else if(){
//执行
}
if(condition1){
//执行
} else {
if (condition2) {
//执行
}
}
循环语句
for (var i=10; i<10; console.log(i), i--)
默认作用于循环语句的最内层或者整个 switch 语句,因此它不必特别指定中断语句的范围。
如果在 for、while 等循环中使用 break,那么这表明停止一个最内层的循环,而将 break 用在 switch 语句中的话,则表明跳出 switch 语句。
它只对循环语句有意义,它只能作用于 for、while、do…while语句中,它表示停止这一次的循环,并跳转到下一次循环迭代开始处运行。
可以使用 continue 语句尽早清理掉一些分支。
它只能作用在一个函数内,一个函数内允许出现多个 return 子句,当函数被调用时,代码执行到第一个 return 子句,并返回它指定的值,如果没有指定返回的值,那该函数返回 undefined。
如果函数执行到最后都没有 return 子句,函数执行到最后一行语句后,会返回 undefined 值。
一般子句用于语句块的内部,并且是开发人员可预知的、可控制的逻辑,而异常用于一个语句块的全局,处理不可预知的、不可控制的逻辑。
try {
//...
} catch [(exception)]{
//...
} finally {
//...
}
触发异常:使用 throw 语句可以在任何位置触发异常,由引擎内部在执行过程中触发异常;
捕获异常:使用 try…catch 语句捕获一块代码可能发生的异常,并使用变量 exception 来指向异常的引用;
结束处理:使用 try…finally 可以无视指定代码块中发生的异常,确保 finally 语句块中的代码总是被执行;
在上面的逻辑中,catch(){…} 和 finally{…} 都是可选的,但至少存在一个,finally 语句块的重点是它总是在 try/catch 退出之前执行,如果在catch或finally 块处理的时候又发生的异常,那么这个异常会被抛出到更外一层的 try…catch/finally 语句中处理。
对于开发人员来说,在使用 finally 代码块时,应该确保其中的语句可以完全且无异常地执行。如果无法确信代码中是否存在异常情况,那么应该将可能出现问题的代码移至 try 块中进行处理,以便更好地保证代码的可靠性和健壮性。
题图由 DeepAI 生成
内容来源于《JavaScript 语言精髓与编程实战》
原创文章,作者:小道研究,如若转载,请注明出处:https://www.sudun.com/ask/34552.html