我知道像Lisp这样的函数式语言没有语句。那里的一切都有表达。 JavaScript是一种功能语言。所以我得出结论,每个JavaScript语句都是一个表达式。当我玩Chrome控制台时,我想到了这个想法。如果表达式未返回特定值,则会对在此处输入的每个语句进行求值,并且控制台将返回undefined。
答案 0 :(得分:7)
我得出结论,每个JavaScript语句都是一个表达式
不,绝对不是。 EcmaScript标准在Statements (§12)和Expressions (§11)之间非常清晰地区分。
然而,你错误的表达式是Expression Statement (§12.4),它只包含一个表达式(并用分号分隔)。
答案 1 :(得分:5)
我会说不,因为你不能只使用任何需要表达式的语句:
// SyntaxError: Unexpected token var
var a = var b;
// SyntaxError: Unexpected token if
var c = if (true) {};
Chrome控制台中显示的undefined
是由于使用了eval()
(或本机/内部等价物),它会评估任何代码:
var a = eval('var b;');
console.log(a); // undefined
undefined
不是var b;
的结果,而是因为eval()
本身仍有返回值 - 评估的代码是否提供了它。