任何JavaScript语句都是表达式吗?

pap*_*et7 3 javascript functional-programming

我知道像Lisp这样的函数式语言没有语句.那里的一切都有表达.JavaScript是一种功能语言.所以我得出结论,每个JavaScript语句都是一个表达式.当我玩Chrome控制台时,我想到了这个想法.如果表达式未返回特定值,则会对在此处输入的每个语句进行求值,并且控制台将返回undefined.

Ber*_*rgi 7

我得出结论,每个JavaScript语句都是一个表达式

不,绝对不是.EcmaScript标准在语句(§12)表达式(§11)之间进行了非常明确的区分.

然而,你错误的表达式是表达式声明(§12.4),它只包含一个表达式(并用分号分隔).


Jon*_*ski 5

我会说不,因为你不能只使用任何需要表达式的语句:

// SyntaxError: Unexpected token var
var a = var b;
Run Code Online (Sandbox Code Playgroud)
// SyntaxError: Unexpected token if
var c = if (true) {};
Run Code Online (Sandbox Code Playgroud)

undefined在Chrome的控制台中显示是由于其使用的eval()(或本地/内部当量),其评估任何代码:

var a = eval('var b;');
console.log(a); // undefined
Run Code Online (Sandbox Code Playgroud)

undefined不是结果var b;,而是因为eval()它本身仍然有一个返回值 - 评估的代码是否提供了它.