zoukankan      html  css  js  c++  java
  • Node入门教程(5)第四章:global 全局变量

    global - 全局变量

    全局对象(global object),不要和 全局的对象( global objects )或称标准内置对象混淆。这里说的全局的对象是说在全局作用域里的内的对象。全局作用域包含了全局对象的属性,还有它继承来的属性。

    注意浏览器下的全局对象跟 nodejs 中的全局对象不一致

    • 浏览器环境下的全局对象就是window
    • Node 的全局对象是 global

    JS 语言标准的全局的内置对象

    JS 语言规范中的全局的内置对象在 Nodejs 中都有效,以下简单过一下,不熟悉请查MDN 文档

    • 全局属性
      • Infinity
      • NaN
      • undefined
      • null 字面量
    • 函数属性
      • eval()
      • uneval()
      • isFinite()
      • isNaN()
      • parseFloat()
      • parseInt()
      • decodeURI()
      • decodeURIComponent()
      • encodeURI()
      • encodeURIComponent()
      • escape()
      • unescape()
    • 基本对象与其他内容
      • Object
      • Function
      • Boolean
      • Symbol
      • Error
      • Number
      • Math
      • Date
      • String
      • RegExp
      • Array
      • Map
      • Set
      • JSON
      • ArrayBuffer
      • Promise
      • Generator
      • GeneratorFunction
      • Reflect
      • Proxy
      • arguments

    nodejs 中的全局变量

    关于模块的补充

    这里先简单补充一下模块的概念,后续我们还会更深入讲解一下,笔者不想让复杂的内容让初学者分心,只是想让您能快速先建立学习 Nodejs 的信心。NodeJs 中把不同功能的 api 封装成不同的模块,避免了不同功能的代码相互冲突。当然 NodeJS 也支持开发人员写的 Nodejs 代码模块化。如果你是 Java、DotNet 的程序员,那 Nodejs 的模块就是 DotNet 的程序集或者 Java 的包。

    Node 中所有的代码都会被 node 编译器自动包装成模块后再进行解析执行,具体细节后面会有详解。

    console(控制台)

    console 模块提供了一个简单的调试控制台,类似于 Web 浏览器提供的 JavaScript 控制台。

    注意:全局的 console 对象的方法既不总是同步的(如浏览器中类似的 API)

    全局的console对象可以再 node 中任何地方直接调用。接下来看看它的常用方法。

    1. 打印日志 console.log

    语法:console.log([data][, ...args])

    打印到输出控制台,并带上换行符。 可以传入多个参数,第一个参数作为主要信息(字符串类型),其他参数作为代替值。

    var count = 5;
    console.log('count: %d', count);
    // 打印: count: 5 到 stdout
    console.log('count:', count);
    // 打印: count: 5 到 stdout
    console.log('count:', count, '-222', '-999');
    // 打印: count:5-222-999。  log方法可以把多个参数连接一块输出。
    

    log 方法的第一个参数是一个字符串,包含零个或多个占位符。 每个占位符会被对应参数转换后的值所替换。 支持的占位符有

    %s - 字符串。
    %d - 数值(整数或浮点数)。
    %i - Integer.
    %f - Floating point value.
    %j - JSON。如果参数包含循环引用,则用字符串 '[Circular]' 替换。
    ...
    

    更多请参考:Node 文档

    console.info() 函数是 console.log() 的一个别名。也就是说你用log方法跟info方法一致。

    1. 打印错误消息和警告信息

    语法:console.error([data][, ...args])

    error方法的使用同 log方法,所以不赘述,我们一般用此方法打印错误消息,一般用log方法打印普通消息。

    console.error('error');
    

    另外打印警告信息使用warn方法,此方法仅仅提示开发人员一些警示信息,用法同log方法。

    语法:console.warn([data][, ...args])

    1. 打印对象结构

    语法: console.dir(obj[, options])

    参数说明:

    • 第一个参数obj,就是要打印属性的对象。

    • 第二个参数options是设置打印的配置项:

      • showHidden - 如果为 true,则该对象中的不可枚举属性和 symbol 属性也会显示。默认为 false。

      • depth - 告诉 util.inspect() 函数当格式化对象时要递归多少次。 这对于检查较大的复杂对象很有用。 默认为 2。 设为 null 可无限递归。

      • colors - 如果为 true,则输出会带有 ANSI 颜色代码。 默认为 false。 颜色是可定制的,详见定制 util.inspect() 颜色。

    var a = { age: 134, t: { name: '33', mm: '333' } };
    console.dir(a);
    console.dir(a, {
      colors: true,
      showHidden: true
    });
    
    

    dir方法非常有用,在可以辅助我们调试时查看对象内的属性和继承关系,也是一个非常好的学习js的手段。

    1. 时间计时

    同浏览器一致,也封装了计时的两个方法:console.time(label)console.timeEnd(label);

    time方法启动一个定时器,用以计算一个操作的持续时间。 定时器由一个唯一的 label 标识。 当调用 console.timeEnd() 时,可以使用相同的 label 来停止定时器,并以毫秒为单位将持续时间输出到 stdout。 定时器持续时间精确到亚毫秒。

    console.time('lb1');
    for (let i = 0; i < 100; i++) {}
    console.timeEnd('lb1');
    // 打印 lb1: 23.43ms
    
    1. 其他方法
    说明实例
    打印堆栈跟踪在代码 console.trace([message][, ...args])
    计数器的显示标签 console.count([label])
    重置指定 label 的内部计数器。 console.countReset([label='default'])
    清空控制台 console.clear()
    断言 console.assert(value[, message][, ...args])

    console的方法还比较多,这里就不一一列举了,有兴趣的可以直接参考中文文档

    定时器

    node提供了全局的3个设置定时器方法:

    • setImmediate(callback[, ...args])
    • setInterval(callback, delay[, ...args])
    • setTimeout(callback, delay[, ...args])

    另外对应3个取消定时器的方法

    • clearImmediate(immediate)
    • clearInterval(timeout)
    • clearTimeout(timeout)

    三个方法,使用上基本都表现一致,这里只说一种情况,其他类比。

    参数说明:
      callback <Function> 当定时器到点时要调用的函数。
      delay <number> 调用 callback 之前要等待的毫秒数。
      ...args <any> 当调用 callback 时要传入的可选参数。
    
    var timer = setTimeout(()=>{
      console.log(123);
    }, 100);
    
    // .... js代码
    
    clearTimeout(timer);
    
    

    callback 可能不会精确地在 delay 毫秒被调用。 Node.js 不能保证回调被触发的确切时间,也不能保证它们的顺序。 回调会在尽可能接近所指定的时间上调用。
    注意:当 delay 大于 2147483647 或小于 1 时,delay 会被设为 1。

    其他全局变量

    另外全局还提供了 Buffer、模块相关变量、process等全局变量。

    这些内容,等我们后续章节再详细介绍。

    到此为止,您如果熟悉前端开发的话,这不就是前端js移到了nodejs上执行了吗?的确如此,但是这运行的环境已经脱离了浏览器,是直接运行在操作系统之上了。

    那么nodejs背后是怎样运行的?模块机制是怎么搞到的?且看下回再解。


    参考:

    1. NodeJs 官网文档
    2. MDN 文档

    老马免费视频教程

    返回教程列表首页

    github地址:https://github.com/malun666/aicoder_node

  • 相关阅读:
    盒子垂直水平居中
    Sahi (2) —— https/SSL配置(102 Tutorial)
    Sahi (1) —— 快速入门(101 Tutorial)
    组织分析(1)——介绍
    Java Servlet (1) —— Filter过滤请求与响应
    CAS (8) —— Mac下配置CAS到JBoss EAP 6.4(6.x)的Standalone模式(服务端)
    JBoss Wildfly (1) —— 7.2.0.Final编译
    CAS (7) —— Mac下配置CAS 4.x的JPATicketRegistry(服务端)
    CAS (6) —— Nginx代理模式下浏览器访问CAS服务器网络顺序图详解
    CAS (5) —— Nginx代理模式下浏览器访问CAS服务器配置详解
  • 原文地址:https://www.cnblogs.com/fly_dragon/p/8715351.html
Copyright © 2011-2022 走看看