《Node学习指南》一第2章 Node与REPL 2.1 REPL:先睹为快和未定义的表达式

第2章 Node与REPL

Node学习指南
尝试使用Node编写自定义的模块或者应用程序时,并不需要每次运行写好的JavaScript文件来测试代码功能。Node有一个交互式组件称为REPL(read-eval-print-loop,读取求值列印循环),这将是本章的主题。

REPL(发音为“repple”)支持简化的Emacs风格行编辑和一小部分基本命令。在REPL中输入任何内容都与用Node运行JavaScript编写的文件具有相同的处理方式。事实上,可以使用REPL编写整个应用程序——这样就可以频繁地对程序进行测试。

本章涉及REPL的一些有趣的技巧以及如何使用这些技巧,包括如何替换浏览历史命令的底层机制以及命令行编辑等内容。

最后,如果内建的REPL不能提供你所需要的交互环境,本章的后续部分会介绍用于创建自定义REPL的API。

提示:
如何使用REPL:http://docs.nodejitsu.com/articles/REPL/how-to-use-nodejs-replNodejitsu。网站提供的如何创建自定义REPL的教程:http://docs.nodejitsu.com/articles/REPL/how-to-create-a-custom-repl

2.1 REPL:先睹为快和未定义的表达式

Node学习指南
只需要输入node命令就可以运行repl,不需要提供任何Node应用文件作参数:

$ node

REPL默认尖括号>为命令行提示符。在该符号之后输入的任何内容都由底层的V8 JavaScript引擎进行处理。

REPL的使用很简单,就像在文件中编写JavaScript一样:

> a = 2;
2

REPL可以即时打印输入的任何表达式的结果。在上面例子中,表达式的结果是2。下面这个例子中表达式结果是有三个元素的数组:

> b = ['a','b','c'];
['a','b','c']

可以使用下划线“_”调用上一个表达式。本例中,a为2,结果表达式两次自增1:

> a = 2;
2
> _ ++;
3
> _ ++;
4

还可以用下划线访问该对象的属性或者调用方法:

> ['apple','orange','lime']
[ 'apple','orange','lime']
> _.length
3
>3+ 4
7
> _.toString();
'7'

在REPL中也可以使用var关键字。可以在之后通过变量名访问表达式或者变量。但是这样可能会得到意料之外的结果。比如,在REPL中输入以下命令行:

var a = 2;

该表达式返回值并不是2,而是undefined。表达式结果为undefined的原因是变量赋值的表达式并不返回变量的值作为表达式的值。

理解以下代码,多少可以解释REPL中的这种现象:

console.log(eval('a = 2'));
console.log(eval('var a = 2'));

将上两行代码写入文件并用Node运行,返回值如下:

2
undefined

第二行代码并没有返回结果给eval,因此返回值为undefined。要记得,REPL是read-eval-print loop,重点在eval,就是求值。

但是,在REPL中你仍旧可以使用该变量,像在Node应用中一样:

> var a = 2;
undefined
> a++;
2
> a++;
3

后两条命令有返回值,由REPL打印输出。

时间: 2024-10-11 23:04:09

《Node学习指南》一第2章 Node与REPL 2.1 REPL:先睹为快和未定义的表达式的相关文章

《Node学习指南》一导读

前 言 Node学习指南 非同寻常的JavaScript 目前正是学习Node的好时机. Node相关的技术依然年轻充满生机,经常出现有趣的变化和改动.同时,这项技术也达到了一定的成熟度,可以确保你在学习Node上花费的时间是值得的:即使在Windows上安装也非常简单:从成百上千的可用模块中涌现出了最佳组合模块:对于产品环境来说这种结构足够健壮. 当使用Node时需要记得两个要点.第一,Node是基于JavaScript的,与你之前用于客户端开发的JavaScript多少有些类似.当然,你也可

《Node学习指南》一1.3 异步函数及Node事件循环

1.3 异步函数及Node事件循环 Node学习指南 Node的基本设计原则是将应用程序放置在单线程(或单进程)中执行,同时异步处理所有事件. 考虑下典型的Web服务器(如Apache)是如何工作的.Apache可以采用两种不同的方式处理传入的请求:一种方式是将传入的每个请求分配到独立的进程中直至请求被处理完毕:另一种方式则是为每一个请求生成单独的处理线程. 第一种方式(也称为prefork multiprocessing model,或prefork MPM)可以根据Apache配置文件中指定

《Node学习指南》一2.3 多行以及更复杂的JavaScript

2.3 多行以及更复杂的JavaScript Node学习指南 你可以像写文件一样在REPL中输入JavaScript,包括导入module的require语句.以下代码显示了如何使用Query String(qs)module: $ node > qs = require('querystring'); { unescapeBuffer: [Function], unescape: [Function], escape: [Function], encode: [Function], stri

《Node学习指南》一1.2 开始Node开发

1.2 开始Node开发 Node学习指南现在你已经安装了Node,是时候开始编写第一个Node应用程序了. 1.2.1 Hello, World in Node 为了测试新的开发环境.语言或者工具,第一个写出来的程序往往是"Hello,World".我们同样也将使用Node创建一个"Hello,World"程序,它仅仅简单的向访问它的用户输出问候语. 示例1-1包含了使用Node创建Hello,World程序需要的全部文本代码. 示例1-1 Node版Hello,

《Node学习指南》一2.4 不可预计的意外—记得经常保存

2.4 不可预计的意外-记得经常保存 Node学习指南Node的REPL是一个便捷的交互式工具,可以使开发任务变得简单点.REPL不仅可以在引入文件之前对JavaScript进行测试,并且可以边编写边测试直到完成时保存代码内容. REPL另一个有用的特性是可以创建自定义的REPL,减少无用的undefined输出,预加载模块以及修改提示符或者eval方法等. 我强烈推荐在REPL中使用rlwrap,可以跨session浏览历史命令.这一特性可以节省大量的时间.话说回来,我们之中谁不喜欢更多更强大

《Node学习指南》一2.2 REPL的优势:更好地理解表层之下的JavaScript

2.2 REPL的优势:更好地理解表层之下的JavaScript Node学习指南下例是一个REPL的典型示范: > 3 > 2 > 1; false 这段代码很好地解释了REPL的工作原理.一眼看上去会认为期望的输出值为true,因为3大于2,2大于1.但是在JavaScript中,表达式是从左到右计算的,每个表达式的返回值作为下一个表达式的一部分进行计算. 以下REPL中的语句可以帮助你更好地理解前端代码: > 3 > 2 > 1; false > 3 >

《CCNP TSHOOT 300-135学习指南》——第1章 故障检测与排除方法

第1章 故障检测与排除方法CCNP TSHOOT 300-135学习指南本章主要讨论以下主题: 故障检测与排除原理常见的故障检测与排除方法利用6种故障检测与排除方法开展故障检测与排除工作大多数现代企业都高度依赖网络基础设施的平稳运行.网络宕机时间常常意味着产能.利润和声誉的损失,因而网络故障检测与排除是企业网络支持团队的重要职能.网络支持团队的故障诊断与解决效率越高,企业遭受的损失就越少.对于复杂网络环境来说,故障检测与排除工作是一件令人头痛的事情,要想快速有效地诊断并解决故障,就必须遵循结构化

《CCNP SWITCH 300-115学习指南》——第1章 基础知识回顾

第1章 基础知识回顾CCNP SWITCH 300-115学习指南在正式进入CCNP SWITCH这门针对园区网交换技术的课程之前,我们首先快速地回顾一遍CCNA中的相关知识点并简要地介绍其中部分技术,以便于本书内容的理解.由于这里提到的所有技术都是独立存在的,如生成树或虚拟LAN(VLAN),因此本章将这些基础知识汇总到一起进行复习,并且在后续章节中将不再重复类似的基础讲解. 如果读者十分了解交换术语,并对交换技术有着基本的认识,建议跳过此章,直接从第2章开始阅读. 本章涵盖如下CCNA基础交

《CCNP SWITCH 300-115学习指南》——第2章 网络设计原理

第2章 网络设计原理CCNP SWITCH 300-115学习指南当我们每次去公司办公或是去学院或大学上课,在访问重要的应用.工具或上网时,都会使用到园区网络.通常,人们会使用便携设备访问互联网,如通过iPhone手机连接公司的WiFi热点,通过园区网收发邮件.编写工作日报或发送即时消息.因此,网络建设的负责人需要遵循合理的园区网设计原理及设计规则,从而为网络提供充分必要的稳定性.可扩展性及弹性来实现100%的在线业务. 本章围绕网络设计和网络结构中的一些核心概念以及Cisco交换机的架构细节,