使用 REPL 测试代码

REPL 表示 Read Evaluate Print Loop,它是一种编程语言环境(基本上是一个控制台窗口),
它将单个表达式作为用户输入,并在执行后将结果返回到控制台。

REPL 会话提供了一种快速测试简单 JavaScript 代码的便捷方式。

一、启动方式

如果没有任何脚本或任何参数的情况下运行 node 命令,将启动一个 REPL 会话:

1
2

node

二、编写测试代码

1
2
3
4
5

> console.log('test')
test
undefined
>

第一个值 test 告诉控制台打印的输出,然后得到 undefined,这是运行 console.log() 的返回值。
Node 读取这行代码,对其进行评估,打印结果,然后返回等待更多行代码。

Node 会在 REPL 中执行的每段代码循环这三个步骤,直到退出会话。 这就是 REPL 得名的地方。

Node 会自动打印任何一行 JavaScript 代码的结果,而无需指示它如何做。 例如,输入以下行并按回车键:

1
2
3
4

> 5 === '5'
false
>

请注意以上两行输出的差异。
Node REPL 在执行 console.log() 后打印 undefined,而另一方面,它只是打印 5 === ‘5’ 的结果。
需要记住,前者在 JavaScript 中只是一个语句,后者是一个表达式。

在某些情况下,要测试的代码可能需要多行。
例如,假设要定义一个生成随机数的函数,在 REPL 会话类型中的输入以下行并按 Enter:

1
2
3

function generateRandom() {
...

Node REPL 足够智能,可以确定还没有完成代码编写,它将进入多行模式,以便输入更多代码。 现在完成函数定义并按回车键:

1
2
3
4
5

function generateRandom() {
...return Math.random()
}
undefined

Node 将退出多行模式,并打印 undefined 因为没有返回值。 这种多线模式是有限的。


三、使用 Tab键 自动完成

REPL 很酷的一点是它是交互式的。

在编写代码时,如果按下 Tab 键,REPL 将尝试自动完成编写的内容以匹配已经定义的变量或预定义的变量。

尝试输入 JavaScript 类的名称,例如 Number,添加一个点并按 Tab。

REPL 将打印可以在该类上访问的所有属性和方法:


四、搜索全局对象

可以通过键入 global 来检查有权访问的全局变量。 并按下 Tab键:


五、_ 特殊变量

如果在某些代码之后键入 _,则将打印上次操作的结果。


六、向上箭头键

如果按向上箭头键,可以访问在当前甚至以前的 REPL 会话中执行的前几行代码的历史记录。


七、点命令

REPL 有一些特殊的命令,都以点开头

  • .help:显示点命令帮助

  • .editor:启用编辑器模式,轻松编写多行 JavaScript 代码。 进入此模式后,输入 ctrl-D 以运行您编写的代码。

  • .break:输入多行表达式时,输入 .break 命令将中止进一步的输入。 与按 ctrl-C 相同。

  • .clear:将 REPL 上下文重置为空对象并清除当前正在输入的任何多行表达式。

  • .load:加载一个 JavaScript 文件,相对于当前工作目录

  • .save:将您在 REPL 会话中输入的所有内容保存到文件中(指定文件名)

  • .exit:退出repl(与按ctrl-C两次相同)

REPL 知道何时输入多行语句而无需调用 .editor。

例如,如果开始输入这样的迭代:

1
2

[1, 2, 3].forEach(num => {

然后按 Enter,REPL 将转到以 3 个点开头的新行,表示现在可以继续处理该块。

1
2
3

... console.log(num)
... })

如果在行尾输入 .break ,多行模式将停止并且语句不会被执行。