Ben*_*Ben -9 javascript evaluation undefined
我的一个非常好的问题是:在 JavaScript 中,空语句的计算结果是什么?
\n这是空语句:
\n;
...如果我评估它,我会得到undefined。
console.log(eval(\';\')) // \'undefined\'Run Code Online (Sandbox Code Playgroud)\r\n然而,这是另一个空语句(在包含数字文字的语句之后):
\n1;;
...然而这似乎评估为1.
console.log(eval(\'1;;\')) // \'1\'Run Code Online (Sandbox Code Playgroud)\r\n这让我很惊讶。
\n那么,空语句的计算结果是什么?
\n我注意到规范说空语句返回“ empty”。我还不知道这意味着什么。
规范还说:
\n\n\n当使用术语 \xe2\x80\x9cempty\xe2\x80\x9d 来命名一个值时,它相当于说 \xe2\x80\x9cno 任何类型的值 \xe2\x80\x9d。
\n
因此,空语句返回“没有任何类型的值”。这意味着它无法返回undefined(这是 type 的值Undefined)。我不确定这如何映射到用户态代码。
空语句根本不返回任何内容(空:“没有任何类型的值”)。语句列表,就像脚本正文中将代码eval解析为的语句列表一样,返回最后一条返回任何内容的语句的值:
\n\nStatementList 的值是StatementList 中最后一个产生值的项的值。例如,以下对\neval 函数的调用都返回值 1:
\nRun Code Online (Sandbox Code Playgroud)\neval("1;;;;;")\neval("1;{}")\neval("1;var a;")\n
空语句列表、空脚本、空块或不包含产生值的语句的语句列表的计算结果为空。
\n然后PerformEval操作在步骤 30中将该空值转换为undefined:
\n\n如果结果.[[Type]] 为
\nnormal且结果.[[Value]] 为empty,则
\n\xc2\xa0 将结果设置为 NormalCompletion(undefined)。