本文介绍Node中的全局对象,包括global本身以及控制台输出对象Console、require函数、定时器相关方法以及\_\_filename和\_\_dirname等全局变量。

一、global全局对象

在Node中定义了一个global对象,代表全局命名空间,所有的全局变量、函数或对象都作为global全局对象的成员。我们可以在REPL环境中直接通过变量来进行查看,下面列出核心成员(细节有省略)。

wendingding$ node
> global
{ console: [Getter],
DTRACE_NET_SERVER_CONNECTION: [Function],
DTRACE_NET_STREAM_END: [Function],
DTRACE_HTTP_SERVER_REQUEST: [Function],
DTRACE_HTTP_SERVER_RESPONSE: [Function],
DTRACE_HTTP_CLIENT_REQUEST: [Function],
DTRACE_HTTP_CLIENT_RESPONSE: [Function],
global: [Circular],
process:
process { ···省略··· },
Buffer: { ···省略··· },
clearImmediate: [Function],
clearInterval: [Function],
clearTimeout: [Function],
setImmediate: { [Function: setImmediate] [Symbol(util.promisify.custom)]: [Function] },
setInterval: [Function],
setTimeout: { [Function: setTimeout] [Symbol(util.promisify.custom)]: [Function] },
module:
Module { ···省略··· },
require: { ···省略··· }

通过打印输出我们发现,global全局对象中包含很多的成员,比如用于控制台输出的console对象、处理底层网络请求的一系列函数以及相对复杂的process对象等,这里先给出整体结构图然后再分别介绍。

下面列出的是全局对象跟网络连接相关的一系列方法(这里不做深入)。

  DTRACE_NET_STREAM_END: [Function],
DTRACE_NET_SERVER_CONNECTION: [Function],
DTRACE_HTTP_SERVER_REQUEST: [Function],
DTRACE_HTTP_SERVER_RESPONSE: [Function],
DTRACE_HTTP_CLIENT_REQUEST: [Function],
DTRACE_HTTP_CLIENT_RESPONSE: [Function],

global全局对象中有一个global属性,该属性指向的是自身,而且全局对象中所有的成员都可以直接通过成员的名称来进行访问(这点跟前端开发中的window对象类似),下面给出简单示例代码。

wendingding$ node
> global.global == global
true
> global == this
true
> global.module
Module {
id: '<repl>',
exports: {},
parent: undefined,
filename: null,
loaded: false,
children: [],
paths:
[ '/Users/文顶顶/Desktop/global/repl/node_modules',
'/Users/文顶顶/Desktop/global/node_modules',
'/Users/文顶顶/Desktop/node_modules',
'/Users/文顶顶/node_modules',
'/Users/node_modules',
'/node_modules',
'/Users/文顶顶/.node_modules',
'/Users/文顶顶/.node_libraries',
'/usr/local/lib/node' ] }
> module.id
'<repl>'

二、Console控制台输出

Console对象主要用于控制台输出,该对象中拥有诸多方法,作用各异但差别不大。

wendingding$ node
> console.log(console)
Console {
log: [Function: bound consoleCall],
info: [Function: bound consoleCall],
warn: [Function: bound consoleCall],
error: [Function: bound consoleCall],
dir: [Function: bound consoleCall],
time: [Function: bound consoleCall],
timeEnd: [Function: bound consoleCall],
clear: [Function: bound consoleCall],
group: [Function: bound consoleCall],
groupCollapsed: [Function: bound consoleCall],
groupEnd: [Function: bound consoleCall],
Console: [Function: Console],
···省略···
context: [Function: context],
[Symbol(counts)]: Map {} }

我们在开发中使用控制台输出常用的是Console.log方法,该方法用于进行标准输出流的输出,也就是在控制台中打印和显示N行字符串信息,使用方式非常简单而且灵活。

console.log("001 我是字符串");
console.log("002 我是需要传递参数的字符串,参数为%s"," XXX");
console.log("002 我是需要传递参数的字符串,参数为%s"," XXX","and Other"); console.log("003 控制输出数字=> %d",10.123);
console.log("003 控制输出符号=> %%",30); console.log("004 控制输出简单计算的结果=> ",3 + 3);
var a = 10,b = 10;
console.log(a == b); console.info("005 我也是字符串");

列出上面代码的输出。

wendingding$ node Console.js
001 我是字符串
002 我是需要传递参数的字符串,参数为 XXX
002 我是需要传递参数的字符串,参数为 XXX and Other
003 控制输出数字=> 10.123
003 控制输出符号=> % 30
004 控制输出简单计算的结果=> 6
true
005 我也是字符串
wendingding$ node Console.js > log.text

console对象的log、info、error、warn方法在使用上几乎没有任何的差别,而且都支持对输出流进行重定向操作(使用>符号),而dir方法则可以查看并打印对象的详细内容,在需要查看对象或函数细节的时候会比较有用,下面给出简单示例。

//语法  console.dir(obj , [ options ] )
//参数
//obj 要打印的目标对象
//options 用来控制打印的可选配置对象,主要配置项如下
//[1] colors: 布尔类型值,输出的信息是否有颜色
//[2] depth: 告诉内部的util.inspect()格式化对象时要递归多少次,默认为2,null则无限递归
//[3] showHidden 设置为true则显示不可枚举属性和 symbol 属性。
wendingding$ node
> var obj = {name:"zs",show:function(){console.log(this.name)}};
undefined
> obj
{ name: 'zs', show: [Function: show] } > console.dir(obj,{showHidden:true,depth:1})
{ name: 'zs',
show:
{ [Function: show]
[length]: 0,
[name]: 'show',
[arguments]: null,
[caller]: null,
[prototype]: show { [constructor]: [Circular] } } }

console.time()和console.endTime()方法用以计算一个操作的持续时间,两个方法需要配对使用,它们接收同一个字符串作为参数以标记开始和结束时间线,下面给出简短示例。

//开始计时(任务标记为for-10000)
console.time("for-10000"); for(var i = 0; i<10000;i++){}
//结束计时
console.timeEnd("for-10000"); //REPL环境中执行代码:
wendingding$ node Console.js
for-10000: 0.209ms

console.group()和console.groupEnd()方法用来设置后面的输出缩进增加或减少两个空格,在8.5.0版本中新增的groupCollapsed方法是group方法的别名,另外clear方法用来清空控制台消息。

bogon:fs wendingding$ node
> console.log("参照字符串");
参照字符串
> console.group("将后续行的缩进增加两个空格")
将后续行的缩进增加两个空格
> console.log("参照字符串");
参照字符串
> console.groupEnd("将后续行的缩进减少两个空格")
> console.log("参照字符串");
参照字符串
>console.clear();

除了全局的 console 实例外,console对象(模块)还在内部提供了Console 类可用来创建一个具有可配置的输出流的简单记录器,代码中通过require("console").Consoleconsole.Console使用,具体的使用方式请参考官方文档,这里简单列出该类的结构。

wendingding$ node
> console.dir(console.Console,{depth:1,showHidden:true})
{ [Function: Console]
[length]: 2,
[name]: 'Console',
[prototype]:
Console {
[constructor]: [Circular],
log: [Object],
info: [Object],
warn: [Object],
error: [Object],
dir: [Object],
time: [Object],
timeEnd: [Object],
trace: [Object],
assert: [Object],
clear: [Object],
count: [Object],
countReset: [Object],
group: [Object],
groupCollapsed: [Object],
groupEnd: [Object] } }

三、定时器相关方法

Node中的timer模块提供了全局的定时器API,这些方法的作用和Web浏览器提供的定时器方法类似。

在实现上,Node中的定时器方法基于Node事件循环来进行构建。

定时器相关方法·语法介绍

setImmediate(callback[, ...args])            预定立即执行的回调函数,它在I/O事件回调之后被触发
setInterval(callback, delay[, ...args]) 每间隔固定时间就执行一次回调函数
setTimeout(callback, delay[, ...args]) 固定时间后执行一次回调函数
clearImmediate(immediate)
clearInterval(timeout) 取消定时器
clearTimeout(timeout) 取消定时器

在上面列出的这些方法中,callback均表示回调函数,如果该参数不是函数类型,那么在执行代码的时候将抛出TypeErrordelay表示时间(计量单位为毫秒),需注意delay的取值范围为1~2147483647,如果超出该范围那么delay的值将会会被设为 1。args表示的是当调用回调函数时传递给回调函数的实际参数,需注意args的传参格式是参数列表而非数组。

clearxxx系列方法均用来取消定时器,这些函数接收一个timeout类型的实例对象(该类型的实例对象是内部创建的,作为setTimeout()setInterval() 的返回值)。

//001 开启定时器
//2秒后执行回调函数,10和20作为回调函数的参数
var timer1 = setTimeout(function(a,b){
console.log("setTimeout方法=>%d",(a +b));
},2000,10,20) //002 开启定时器
//每隔1秒就执行一次回调函数,Nice作为回调函数的参数
var timer2 = setInterval(function(param){
console.log("setInterval=>参数:",param);
},1000,"Nice!") //003 取消定时器
//5秒之后执行回调函数,取消time2定时器
setTimeout(function(){
console.log("取消定时器timer2");
clearInterval(timer2)
},5000) //timer2.unref()
//当调用该方法时,活动的定时器对象对象不要求 Node.js 事件循环保持活动。
//如果没有其他活动保持事件循环运行,则进程可能在定时器对象的回调函数被调用之前退出。
//注意:多次调用定时器对象的unref() 方法没有效果。 //timer2.ref()
//当调用该方法时,只要定时器对象处于活动状态就要求Node事件循环不要退出。
//注意:多次调用定时器对象的ref()方法没有效果。
//注意:默认所有的定时器对象都是"ref"的,通常不需要调用ref()方法,除非之前调用了unref()。

说明 定时器对象的unref方法能够取消回调函数的调用。当指定定时器实例对象的回调函数被取消后,可以通过对应的ref方法来恢复调用,下面列出代码的执行情况:

wendingding$ node timer.js
setInterval=>参数: Nice!
setTimeout方法=>30
setInterval=>参数: Nice!
setInterval=>参数: Nice!
setInterval=>参数: Nice!
取消定时器timer2

四、 __filename和__dirname

__filename__dirname是Node中预定义的两个变量,分别用来获取当前模块的文件名(全路径)以及当前的目录名,这两个变量在任何模块文件的内部均可使用。

>❏  **\_\_filename** 获取当前模块文件的完整绝对路径(文件名)
>❏ **\_\_dirname** 获取当前模块所在目录的完整绝对路径(目录名)

我们可以在JavaScript文件中打印__filename__dirname变量,然后运行查看结果。

//备注:在timer.js文件中打印变量
console.log(__dirname);
console.log(__filename); //REPL环境执行timer.js文件结果
wendingding$ node timer.js
/Users/文顶顶/Desktop/fs
/Users/文顶顶/Desktop/fs/timer.js

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

  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. openlayers4 入门开发系列之风场图篇

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. 适合Java程序员的Go入门笔记

    0.背景 3年java开发背景(因此这篇文章的特点是:比较适合java程序员doge),业余时间有了解过一些go,如今加入字节团队主要技术栈是go,此篇主要结合go语言圣经和团队内go项目,总结一些基 ...

  2. jmeter之多并发

    1.做压力测试时需要设置线程数,2.造数据时跑多接口多条数据需要设置线程数,并且保证每个线程的多接口顺序执行.3.需要设置数据不重复或者自增 一.设置线程数 主要用于压力测试需要多并发时设置线程数,以 ...

  3. Python3循环结构(一)for循环

    Python3循环结构 在Python中主要有两种类型的循环结构:for循环和while循环.for循环一般用于有明显边界范围的情况,例如,计算1+2+3+4+5+-+100等于几的问题,就可以用fo ...

  4. Oracle 使用UTL_HTTP发送http请求--转载

    参考:https://blog.csdn.net/tmaczt/article/details/82665885 GET方式 CREATE OR REPLACE FUNCTION FN_HTTP_GE ...

  5. windows oracle11gR2安装使用

    安装 plsql安装 https://blog.csdn.net/li66934791/article/details/83856225 配置tns # tnsnames.ora Network Co ...

  6. AI 在软件测试中的应用:2025 年趋势、工具及入门指南

    引言 人工智能 (AI) 正在深刻地重塑软件开发和质量保证 (QA) 的各个方面.尤其是在软件测试领域,AI 不再仅仅是未来愿景,而是当下正在发生的变革.据世界质量报告(2023-24)指出,高达 7 ...

  7. Bolt DIY架构揭秘:从模型初始化到响应生成的技术之旅

    Bolt DIY 是一个强大的开源AI辅助开发工具,允许用户在浏览器中进行全栈Web开发.它的核心特点是支持多种大型语言模型(LLM),包括OpenAI.Anthropic.Ollama.Google ...

  8. windows11 安装CUDA Toolkit,Python,Anaconda,PyTorch并使用DeepSeek 多模态模型 Janus-Pro识别和生成图片

    一.概述 因为公司网络做了严格限制,必须使用账号登录,才能上网.必须是指定的ip地址和MAC地址设备才可以上网. windows11开启热点,安装第三方虚拟机软件,开启WSL2虚拟机都是被禁止的,否则 ...

  9. 解决更新WIFI驱动后出现网络适配器黄色三角警告

    更新WIFI驱动后出现网络适配器黄色三角警告问题的解决方案 在更新 Intel 无线网卡驱动后,遇到了网络适配器异常的问题,尤其是在曾经安装/卸载过 VMware 的电脑上.本篇文章将详细介绍这个问题 ...

  10. 汇编语言笔记——8086&&寻址方式与指令系统

    汇编语言中 语句不区分大小写,编译软件会自动识别语句 用户自定义的变量和符号必须区分大小写. 8086 1.寄存器 cpu在访问存储器时,必须指明: 段寄存器:所访问的存储单元属于哪个段 偏移量:相应 ...