本文主要介绍Node提供的交互式运行环境REPL,包括常见操作以及基础命令等内容。

一、REPL介绍

在Node.js中,提供了一个交互式的运行环境-REPL(Read-Eval-Print-Loop)。

REPL解释器执行任务的方式

❏  <div class='liYY'>**Read**</div>  **读取**用户输入并存储。
❏ <div class='liYY'>**Eval**</div> **执行**用户输入的代码。
❏ <div class='liYY'>**Print**</div> **输出**代码的执行结果。
❏ <div class='liYY'>**Loop**</div> **循环**执行以上步骤,直到退出。

在REPL环境中我们可以操作变量执行JavaScript文件访问和使用Node内置的模块声明和调用函数甚至开启服务器,在该环境中可以方便的对JavaScript代码进行调试操作。

二、基本操作

在安装好Node.js之后,打开命令行窗口输入node指令即可进入到REPL环境。此时,命令行窗口中将会显示REPL运行环境的提示符>

操作变量

wendingding$ node
> name = "wendingding"
'wendingding'
> age = 18
18
> console.log("姓名:"+name,"年龄:"+age)
姓名:wendingding 年龄:18 > obj = {className:"太乙金仙",id:01};
{ className: '太乙金仙', id: 1 }
> obj.className
'太乙金仙'
> obj.id
1

上面的命令行中我们直接把字符串赋值给name,把数字18赋值给age。此外,还以字面量的方式创建了obj对象,而且通常观察发现REPL环境对JavaScript代码的支持还是比较好的。上面命令行在演示操作变量的时候,并没有使用var关键字,需要注意的是在REPL环境中如果把表达式赋值给var 关键字声明的变量,那么回车之后得到的结果将是undefined

wendingding:JQuery wendingding$ node
> var name = "LiuY"
undefined
> name
'LiuY'
> var obj = {name:"LiuY",age:18,birthday:"1993-08-22"};
undefined
> obj
{ name: 'LiuY', age: 18, birthday: '1993-08-22' }
> obj.showName = function(){ console.log(this.name) }
[Function]
> obj.showName
[Function]
> obj.showName();
LiuY
★ 为什么输出的是undefined而不是具体的值?

变量是否使用var声明其结果截然不同,是因为REPL环境内部使用eval函数来评估表达式的执行结果

eval函数的作用主要是把字符串转换为JavaScript的代码并且马上执行,在早期开发中常用来处理JSON数据的反序列化处理(具体的详情可以参考JSON数据解析),但因为eval函数的使用存在严重的安全隐患问题且会破坏JavaScript代码本身的词法作用域影响性能,所以不建议使用(在严格模式下禁用)。我们可以通过执行下面的代码来进行比较和验证。

console.log(eval("name='wendingding'"));
wendingding console.log(eval("var newName='wendingding'"));
undefined

备注 在REPL环境中访问对象方法(函数)的时候,并不会完整的打印整个函数的内容而总是简单的显示和输出[Function],这是因为函数内容可能又臭又长,做人做事呐还是简单点好 :)

下划线字符

在REPL环境中,我们可以通过下划线字符(_)来访问最近使用的表达式。您可以通过(_)来访问最近的变量,对象甚至是对象的属性和方法。

wendingding:JQuery wendingding$ node
> index = 3
3
> _ + 4
7
> obj = {name:"LiuY",age:18,show:function(){console.log(this.name,this.age)}}
{ name: 'LiuY', age: 18, show: [Function: show] }
> obj.name
'LiuY'
> _
'LiuY'
> obj.show
[Function: show]
> _
[Function: show]
在使用下划线字符(_)访问最近表达式的时候并不能修改变量的值。

多行输入

在REPL环境中支持输入多行代码,如果需要在REPL环境中声明和执行函数而且函数体较长,那么可以将函数分成多行来书写(直接回车即可),当该表达式还没有完成的时候,REPL环境将为每一行添加···符号,下面给出简单的使用示例。

wendingding:JQuery wendingding$ node
> function sum(a,b){
... var result = a + b;
... console.log(result);
... return result;
... }
undefined
> sum(1,2);
3
3

三、基础命令

.break 返回命令提示符的起点,常用于重写代码(调整)。
.clear 返回命令提示符的起点,同.break命令。
.exit 退出当前的REPL运行环境。
.help 显示REPL环境中所有的基础命令。
.save 把REPL环境中输入的所有表达式保存到文件。
.load 把指定文件中的所有表达式依次加载到当前的REPL运行环境。

在Node.js中提供了一些基础命令来帮助我们更好的使用REPL运行环境,这些基础命令都以点(.)开始,下面给出简单示例。

wendingding:JQuery wendingding$ cd /Users/文顶顶/Desktop/node
wendingding:node wendingding$ touch index.js
wendingding:node wendingding$ vim index.js
wendingding:node wendingding$ cat index.js
var name = "文顶顶";
var age = 18;
var obj = {
name:"zs",
class:"Node",
show:function(){
console.log("姓名:"+this.name+" 班级:"+ this.class)
}
} //001 测试.load命令
wendingding:node wendingding$ node
> .load ./index.js
var name = "文顶顶";
var age = 18;
var obj = {
name:"zs",
class:"Node",
show:function(){
console.log("姓名:"+this.name+" 班级:"+ this.class)
}
}
> obj.name
'zs'
> name
'文顶顶' //002 测试.help命令
> .help
.break Sometimes you get stuck, this gets you out
.clear Alias for .break
.editor Enter editor mode
.exit Exit the repl
.help Print this help message
.load Load JS from a file into the REPL session
.save Save all evaluated commands in this REPL session to a file
> index = "我是测试的内容";
'我是测试的内容' //003 测试.save命令
> .save ./save.js
Session saved to:./save.js //004 测试.exit命令
> .exit
wendingding:node wendingding$ cat save.js
var name = "文顶顶";
var age = 18;
var obj = {
name:"zs",
class:"Node",
show:function(){
console.log("姓名:"+this.name+" 班级:"+ this.class)
}
} obj.name
name
index = "我是测试的内容";

前端开发系列082-Node篇之PRPL的更多相关文章

  1. openlayers5-webpack 入门开发系列一初探篇(附源码下载)

    前言 openlayers5-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载 ...

  2. leaflet-webpack 入门开发系列一初探篇(附源码下载)

    前言 leaflet-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址 w ...

  3. 【Windows10 IoT开发系列】配置篇

    原文:[Windows10 IoT开发系列]配置篇 Windows10 For IoT是Windows 10家族的一个新星,其针对不同平台拥有不同的版本.而其最重要的一个版本是运行在Raspberry ...

  4. 旨在脱离后端环境的前端开发套件 - IDT Server篇

    IDT,一个基于Nodejs的,旨在脱离后端环境的前端开发套件,目的就是能让前端开发完全脱离后端的环境,无论后端是什么模板引擎(主流),都能应付自如. IDT主要包括两大部分:Server + Bui ...

  5. cesium-webpack 入门开发系列一初探篇(附源码下载)

    前言 cesium-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址 we ...

  6. 前端开发【第2篇:CSS】

    鸡血 样式的属性多达几千个,但别担心,按照80-20原则,常用的也就几十个,你完全可以掌握它. Css初识 HTML的诞生 早期只有HTML的时候为了让HTML更美观一点,当时页面的开发者会把颜色写到 ...

  7. [置顶]【实用 .NET Core开发系列】- 导航篇

    前言 此系列从出发点来看,是 上个系列的续篇, 上个系列因为后面工作的原因,后面几篇没有写完,后来.NET Core出来之后,注意力就转移到了.NET Core上,所以再也就没有继续下去,此是原因之一 ...

  8. openlayers4 入门开发系列之风场图篇

    前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...

  9. openlayers4 入门开发系列之热力图篇(附源码下载)

    前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...

  10. Android Metro风格的Launcher开发系列第三篇

    前言: 各位小伙伴,又到了每周更新文章了时候了,本来是周日能发出来呢,这不是赶上清明节吗,女王大人发话了,清明节前两天半陪她玩,只留给我周一下午半天时间写博客,哪里有女王哪里就有压迫呀有木有!好了闲话 ...

随机推荐

  1. unity手机花屏

    关于Camera组件中Clear Flags的理解 - 知乎 (zhihu.com) https://blog.csdn.net/yanchezuo/article/details/77337755 ...

  2. Sa-Token v1.42.0 发布 🚀,新增 API Key、TOTP 验证码、RefreshToken 反查等能力

    Sa-Token 是一款 免费.开源 的轻量级 Java 权限认证框架,主要解决:登录认证.权限认证.单点登录.OAuth2.0.微服务网关鉴权 等一系列权限相关问题. 目前最新版本 v1.42.0 ...

  3. Java开发手册——【强制】所有整型包装类对象之间值的比较,全部使用 equals 方法比较

    Java开发手册说明: 对于 Integer var = ? 在-128 至 127 之间的赋值,Integer 对象是在 IntegerCache.cache 产生,会复用已有对象,这个区间内的 I ...

  4. vue3 基础-列表渲染

    本篇讲列表渲染, 主要是对 v-on 指令配合 v-if 和一些数组相关的方法来体验 vue 的模板渲染方法. 数组元素的渲染 <!DOCTYPE html> <html lang= ...

  5. GPT-4 即将在 ChatGPT 中退役:技术进化的又一里程碑

    你是否曾好奇人工智能背后的推动力是什么?OpenAI 最近宣布了一项重大更新--从2024年4月30日起,ChatGPT将全面采用全新的AI模型GPT-4o替代现行的GPT-4.这标志着一次重大的技术 ...

  6. vue devtools安装及使用

    (1)chrome商店下载 进入浏览器的设置: 或者直接进入该网址:https://chrome.google.com/webstore/search/vue devtools?hl=zh-CN (2 ...

  7. 预编译语法_sql注入技巧

    预编译可以将一串命令提前编译成可执行文件 可以用于被过滤或检测到的字眼分割成几部分以越过检测 set @sentence_i_want_to_exec=concat('sel','ect * from ...

  8. 长短期记忆(LSTM)网络模型

    一.概述   长短期记忆(Long Short-Term Memory,LSTM)网络是一种特殊的循环神经网络(RNN),专门设计用于解决传统 RNN 在处理长序列数据时面临的梯度消失 / 爆炸问题, ...

  9. QEMU安装巨大的坑

    网上教程大多数让你 sudo apt install qemu 实际上根本没用!!!! 查了一下debian官网 结果 QEMU is a fast processor emulator. Once ...

  10. 「Log」做题记录 2023.8.28-2023.9.24

    \(2023.8.28-2023.9.3\) \(\color{blueviolet}{P3704}\) 莫反. \(\color{limegreen}{P8773}\) ST 表. \(\color ...