JavaScript解释器是否从读取的任何内容中产生价值



来自JavaScript雄辩书:

许多语言中的许多操作不会产生有意义的价值 仅仅因为必须而产生未定义 产生一些值。

口译员是否必须从读取的内容中产生一个值?
这些操作没有产生有意义的价值的示例?

语句和表达式都有值,但是在代码中无法访问非表达语句*的值。这在规范级别上是有意义的,您可以在浏览器的控制台中看到它,但实际上并没有任何日常实用程序。声明不在代码的分步执行之外,在规范级别上没有结果值(件显示undefined作为其结果)。

要在行动中看到它,请打开浏览器控制台,键入以下内容:

if (true) "foo"

...并按Enter。您会看到"foo"。现在尝试:

if (false) "foo"

...并按Enter。您会看到undefined

为什么?因为if语句的结果是其身体的结果(如果条件为真)或undefined(如果条件为false)。

这是上面的规格链接有关if (condition) statement的说法:

运行时语义:评估

ifstatement if ( 表达式 ) 语句

  1. exprref 是评估表达式
  2. 的结果
  3. exprvalue be toboolean(?getValue( exprref ))。
  4. 如果 exprvalue false ,然后
    1. 返回strumanCompletion( UNDEFINED )。
    别的
    1. stmtcompletion 是评估语句
    2. 的结果
  5. 返回完成(updateEmpty( stmtcompletion undefined ))。

...其中完成(...)创建一个完成记录;第一个参数是完成的 value

这是在您的控制台中尝试的另一个:

var n = 4; while (n--) { "body " + n; }

结果是 "body 0",因为 while语句的值是上次执行的值(或undefined,如果从未执行过该身体)。


* "非表达语句" - JavaScript允许在预期语句的位置出现任何表达式作为语句(例如,这是函数调用作为语句的工作方式)。这就是为什么我的"foo"if (true) "foo"中工作的原因;这是一个表达式语句,其中表达式为字符串文字。

相关内容

最新更新