表达式(Expression)和语句(Statement)是编程语言中的基本元素,它们在 JavaScript 或者其他编程语言中具有不同的作用和含义。
语句
JavaScript 程序的执行单位为行(line),也就是一行一行地执行。一般情况下,每一行就是一个语句。
语句(statement)是为了完成某种任务而进行的操作,比如下面就是一行赋值语句。
var a = 1 + 3;
这条语句先用var
命令,声明了变量a
,然后将1 + 3
的运算结果赋值给变量a
。
语句以分号结尾(非强制),一个分号就表示一个语句结束。多个语句可以写在一行内。
var a = 1 + 3 ; var b = 'abc';
分号前面可以没有任何内容,JavaScript 引擎将其视为空语句。
;;;
上面的代码就表示3个空语句。
语句(Statement)是执行某种行为的一段代码,不一定会产生值。它通常会改变程序的状态(例如,循环,分支,函数调用等)。例如:
if (x === 10) { console.log('x is 10') }
这是一条 if 条件语句,它执行了某种操作,但并没有返回值。
表达式
以赋值语句 var a = 1 + 3;
为例,其中的 1 + 3
就叫做表达式(expression),指一个为了得到返回值的计算式。
表达式不需要分号结尾。一旦在表达式后面添加分号,则 JavaScript 引擎就将表达式视为语句,这样会产生一些没有任何意义的语句。
1 + 3;
'abc';
上面两行语句只是单纯地产生一个值,并没有任何实际的意义。
表达式(Expression)是一段代码,它会产生一个值。表达式是一种求值操作,表达式本身以及它的子表达式组合在一起代表了某种值。例如:
5
3 + 4
x
x = 10
这些都是表达式,它们都会产生一个值。
问:语句和表达式的差异?
答:表达式通常会产生一个值,而语句则是执行操作但不一定产生值
问:如何区分表达式和语句
查阅了一些资料,说法不一,主要有两种判断标准:
- 根据是否有返回值来判断,有返回值的式子,就可视作表达式
- 圆括号之中,只能放置表达式,如果将式子放到
()
中没有出现错误提示,那么就是表达式
思考:var x = 10
是表达式还是语句?
答1:**var x = 10**
既是表达式又是语句,因为它会产生一个值(被赋值的新值),同时,它也是一个语句,因为它执行了一个操作(赋值)
答2:**var x = 10**
是语句,判断的标准是将其包裹在小括号中 **(var x = 10)**
,看是否会报错,不会报错就说明是表达式
其实,当我们在写代码时,其实没有必要严格区分开到底什么是“语句”,什么是“表达式”。重要的是理解这么写会不会产生值。
问:写在前面的语句一定先执行?
答:不一定
对于初学编程的人,很可能会存在这样的疑问。
在大多数情况下,我们可以认为代码是按照从上到下的顺序执行的。但是,具体哪些语句先执行,哪些语句后执行,一两句话道不明,这涉及到的因素有很多,比如:异步操作、事件驱动、函数调用、控制流语句…… 这些都将是我们在学习时需要重点掌握的知识点。