JavaScript中区分表达式和语句

7 阅读3分钟

在JavaScript中,表达式(Expression)语句(Statement) 是两个核心概念,它们的主要区别在于是否有返回值

1. 表达式(Expression)

表达式是会产生一个值的代码片段。表达式可以出现在任何需要值的地方。

特点:

  • 总是会返回一个值
  • 可以作为其他表达式的一部分

常见表达式类型:

// 1. 字面量表达式
5               // 数字字面量
'hello'         // 字符串字面量
true            // 布尔字面量
{ name: 'John' } // 对象字面量
[1, 2, 3]       // 数组字面量

// 2. 变量引用表达式
x
myVariable

// 3. 算术表达式
10 + 5          // 返回 15
x * y

// 4. 赋值表达式
x = 10          // 返回 10
y = x + 5       // 返回 15

// 5. 函数调用表达式
Math.max(1, 2, 3) // 返回 3
console.log('hi') // 返回 undefined

// 6. 比较表达式
x > 5           // 返回 true 或 false
a === b

// 7. 逻辑表达式
x && y
a || b

// 8. 三元条件表达式
age >= 18 ? 'adult' : 'minor'

2. 语句(Statement)

语句是执行一个操作的代码片段,通常不返回值(除了表达式语句)。

特点:

  • 执行操作但不一定有返回值
  • 构成程序的基本结构单元

常见语句类型:

// 1. 声明语句
let x;          // 变量声明
const y = 10;
function foo() {} // 函数声明

// 2. 条件语句
if (x > 10) {
    console.log('big');
} else {
    console.log('small');
}

// 3. 循环语句
for (let i = 0; i < 5; i++) {
    console.log(i);
}

while (x < 10) {
    x++;
}

// 4. 控制流语句
break;
continue;
return x + y;
throw new Error('Oops!');

// 5. 表达式语句(特殊的语句)
x = 10;         // 赋值表达式作为语句
foo();          // 函数调用表达式作为语句

3. 关键区别

特性表达式语句
是否有返回值总是有通常没有(表达式语句除外)
能否独立存在不能,需要被使用可以独立成为一行代码
能否嵌套可以嵌套在其他表达式中不能嵌套(某些语句包含表达式)
主要目的产生一个值执行一个操作

4. 表达式语句

有些表达式可以单独作为语句使用,这叫做表达式语句

// 这些都是表达式,但作为语句使用
x++;            // 自增表达式语句
x = 10;         // 赋值表达式语句
foo();          // 函数调用表达式语句

5. 需要注意的情况

立即执行函数表达式(IIFE)

// 函数表达式可以作为语句的一部分
(function() {
    console.log('IIFE');
})();

// 或者用括号包裹
(() => {
    console.log('Arrow IIFE');
})();

对象字面量作为语句

// 这会被解释为代码块,而不是对象
{ name: 'John' }  // 语法错误或代码块

// 需要加括号使其成为表达式
({ name: 'John' }) // 对象表达式

函数声明 vs 函数表达式

// 函数声明(语句)
function foo() {
    return 'foo';
}

// 函数表达式(表达式)
const bar = function() {
    return 'bar';
};

// 箭头函数表达式
const baz = () => 'baz';

6. 实际应用示例

// 表达式在语句中
if (x > 5) {  // x > 5 是表达式,if 是语句
    console.log('大于5');
}

// 表达式作为函数参数
console.log(x + y);  // x + y 是表达式

// 语句不能放在需要表达式的地方
const result = if (x > 5) { return 'yes' } else { return 'no' }; // 错误!
const result = x > 5 ? 'yes' : 'no';  // 正确,使用三元表达式

// 在模板字符串中只能使用表达式
const message = `结果是:${x > 5 ? '通过' : '失败'}`;

理解表达式和语句的区别对于编写正确、高效的JavaScript代码非常重要,特别是在使用箭头函数、条件运算符和对象解构等现代JavaScript特性时。