zoukankan      html  css  js  c++  java
  • node js学习——REPL(交互式解释器)

    1、简介

    Node.js REPL(Read Eval Print Loop:交互式解释器) 表示一个电脑的环境,类似 Window 系统的终端或 Unix/Linux shell,我们可以在终端中输入命令,并接收系统的响应。

    Node 自带了交互式解释器,可以执行以下任务:

    读取 - 读取用户输入,解析输入了Javascript 数据结构并存储在内存中。

    执行 - 执行输入的数据结构

    打印 - 输出结果

    循环 - 循环操作以上步骤直到用户两次按下 ctrl-c 按钮退出。

    Node 的交互式解释器可以很好的调试 Javascript 代码。

      REPL既可以作为独立单机程序,也可以被其他的程序包含在内的程序。

      它提供了一种交互方式,即“执行程序,展现结果”。

      它可以被用作debugging,testing 或者只是执行操作得到一些结果。

    2、执行REPL

      打开命令行,到达node.js安装的目录,键入node

    $ node
    >

      会看到REPL命令提示符>在这里你可以输入任何Node.js的命令。

    1)、简单表达式

      让我们尝试在Node.js的REPL命令提示符下完成简单的数学计算:
    复制代码

    $ node
    > 2 + 3
    5
    > 2 + ( 2 * 3 ) - 4
    4
    >

    复制代码

      注意:> 是REPL命令的提示符。

    2)、使用变量

      你可以将数据存储在变量中,并在你需要的使用它。

      变量声明需要使用 var 关键字,如果没有使用 var 关键字变量会直接打印出来。

      使用 var 关键字的变量可以使用 console.log() 来输出变量。
    复制代码

    $ node
    > x = 10
    10
    > var y = 10
    undefined
    > x + y
    20
    > console.log("Hello World")
    Hello World
    undefined

    复制代码

    3)、多行表达式

      Node REPL 支持输入多行表达式,这就有点类似 JavaScript。接下来让我们来执行一个 do-while 循环:
    复制代码

    $ node
    > var x = 0
    undefined
    > do {
    ... x++;
    ... console.log("x: " + x);
    ... } while ( x < 5 );
    x: 1
    x: 2
    x: 3
    x: 4
    x: 5
    undefined
    >

    复制代码

      ... 三个点的符号是系统自动生成的,你回车换行后即可。Node 会自动检测是否为连续的表达式。  

    4)、使用函数
    复制代码

    > var name="aaa"
    undefined
    > name
    'aaa'
    > function getName(){
    ... console.log(this.name);
    ... }
    undefined
    > getName()
    aaa
    undefined

    复制代码

      因为REPL环境内部使用eval函数来评估该表达式的执行结果,所以有些东西我们可以直接这样写,如对象:

    > {a:1,b:2}
    { a: 1, b: 2 }

    > [1,2,3,4,5]
    [ 1, 2, 3, 4, 5 ]

    5)、下划线_

      使用_可以指代上一次的操作执行后的值,比如

      对象:
    复制代码

    > {a:2,b:3}
    { a: 2, b: 3 }
    > for(var key in _){
    ... console.log("key="+key+",value="+_[key]);
    ... }
    key=a,value=2
    key=b,value=3
    undefined

    复制代码

      数组:
    复制代码

    > [1,2,3,4,5]
    [ 1, 2, 3, 4, 5 ]
    > Object.keys(_) //这里的_指代的时上一次执行的数组
    [ '0', '1', '2', '3', '4' ] //获取index值

    注意 下面的值不是我们的预期,因为_指代的已经不是原先的数组了!

    > _.map(function(k){return _[k]*_[k]})
    [ 0, 1, 4, 9, 16 ] //获取元素值

    复制代码

      正确的结果:

    > [1,2,3,4,5]
    [ 1, 2, 3, 4, 5 ] //数组
    > Object.keys(_).map(function(k){return _[k]*_[k]})
    [ 1, 4, 9, 16, 25 ] //元素值

    3、REPL命令
    复制代码

    ctrl + c - 终止当前命令

    ctrl + c twice - 终止Node REPL

    ctrl + d - 终止Node REPL

    Up/Down Keys - 查看命令历史记录和修改以前的命令

    tab Keys - 当前指令的列表

    help - 所有命令的列表

    break - 退出多行表达式

    clear - 从多行表达退出

    save filename - 当前Node REPL会话保存到文件中

    load filename - 加载文件的内容在当前Node REPL会话

    复制代码

  • 相关阅读:
    (双指针 二分) leetcode 167. Two Sum II
    (双指针) leetcode 485. Max Consecutive Ones
    (双指针) leetcode 27. Remove Element
    (String) leetcode 67. Add Binary
    (数组) leetcode 66. Plus One
    (N叉树 BFS) leetcode429. N-ary Tree Level Order Traversal
    (N叉树 递归) leetcode 590. N-ary Tree Postorder Traversal
    (N叉树 递归) leetcode589. N-ary Tree Preorder Traversal
    (N叉树 DFS 递归 BFS) leetcode 559. Maximum Depth of N-ary Tree
    (BST 递归) leetcode98. Validate Binary Search Tree
  • 原文地址:https://www.cnblogs.com/zhengyuan1314/p/7064621.html
Copyright © 2011-2022 走看看