ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] # 语句、表达式和运算符 ## 表达式和语句的构成 JavaScript 的源代码本质上是一个语句的集合。语句是由语句和表达式所构成的。表达式则是由表达式和运算符构成的。 可以被分解为保留字、表达式与符号。即使在一条语句中包含其他语句,只要对这条被包含的语句继续进行分解,最终都会变为仅包含保留字、表达式与符号的状态。对于表达式来说,虽然也能在一句表达式中包含其他的表达式,不过只要对所包含的表达式进行分解,最终总是能达到仅包含标识符、字面量与运算符的状态。 ## 标识符 命名规则: - 必须是除保留字以外的单词 - 必须是除true、false、null以外的单词 - 必须是以 Unicode 的(非空)字符开始,之后接有 Unicode 字符或是数字的单词 - 单词的长度并无限制 在实际的编程过程中应遵循:以英文字符、下划线或$开始,之后接有英文字符、下划线、$、数字的单词。习惯上以下划线开始的标识符会被作为“内部标识符”来使用。 ## 字面量 在代码中写下这些值之后,将会在运行时直接使用这些值的字面含义。 ## 语句 语句(statement)的定义可以由该语言经过明确定义的语法(syntax)规则得到,并且可以在运行程序时执行(execute)语句。 ## 代码块(复合语句) 代码块是在大括号({})中所写的语句,以此将多条语句的集合视为一条语句来使用。ECMAScript 中代码块的变量并不存在块级作用域这样的概念。 ## if-else 语句 ```javascript if (条件表达式){ 语句 }else if (条件表达式){ 语句 }else{ 语句 } ``` 条件表达式的位置所写的式子,将被求值转换为布尔型。 ## switch-case 语句 ```javascript switch (语句){ case 表达式1: 语句 break; case 表达式2: 语句 break; case 表达式3: 语句 break; ... default: 语句 break; } ``` 用于跳转目标的作用。可以有多个 case 标签,但是只有一个 default 标签。使用 break 来跳出 switch 语句。 ## while 语句 ```javascript while (条件表达式){ 语句 } ``` 一旦开始执行 while 语句,就先对条件表达式进行求值。如果值为 false,则不会执行循环部分的语句,并结束改 while 语句。如果值为 true,则执行该语句。语句执行完成之后,会再次对条件表达式进行求值。直到值为 false。 以下情况会从 while 循环中退出: - 保证在循环过程中条件表达式的值将变为 false - 在循环内部使用 break 语句 - 在循环内部使用 return 语句 - 在循环内部抛出异常 ## for 语句 一般被称为 for 循环。 ```javascript for (初始化表达式; 条件表达式; 更新表达式){ 语句 } ``` 其中的三个表达式都是可以省略的。 在初始化表达式中,通常会写诸如 `i=0` 这样对变量进行初始化的表达式。初始化表达式中对循环变量进行初始化,在更新表达式中对循环变量进行更新,在条件表达式中检查循环变量的值。 ## for in 语句 ```javascript for (变量 in 对象表达式){ 语句 } ``` in 的左侧是在语句中供赋值的表达式,能够在循环时对其进行操作。in 的右侧是 Object 类型的表达式。 ## for each in 语句 ```javascript for each (变量 in 对象表达式){ 语句 } ``` for each in 语句并不是把属性名赋值给变量,而是将属性值赋值给他。 ```javascript var obj = { x: 1, y: 2, z: 3 }; for each (var v in obj){ console.log(v) // 1 2 3 } ``` ## break 语句 在循环中有时需要中途跳出,可以使用 break 语句。 ## continue 语句 在循环中使用 continue 语句,就会跳过在此之后本次循环内尚未执行的语句。 ## return 语句 return 语句会中断函数的处理,并将指定的表达式的值作为函数的返回值返回。如果没有指定表达式,函数的返回值将会是 undefined。 ## 异常 ```javascript throw 表达式; try { 语句 } catch(变量名) { 语句 } finally { 语句 } ``` 通过 throw 抛出异常,通过 try-catch-finally 捕获异常。finally 始终都会执行。 ## in 运算符 in 用于检验属性是否存在的运算符,其运算结果为布尔值。 ## instanceof 运算符 instanceof 是一种用于类型判断的运算符,其运算结果为布尔值。 ## 三目运算符 ```javascript 条件表达式 ? 表达式1 : 表达式2; ``` 条件表达式的操作数会首先被求值。得到的值将会转换为布尔型,如果为 true,则对表达式1进行求值。如果为 false,则对表达式2进行求值。 ## delete 运算符 用于删除属性的单目运算符。从对象中删除以操作数指定的属性。运算结果为布尔值。如果被删除或属性不存在则为 true,反之为 false