Node——Node.js基础

对Node.js中的基础知识进行讲解,包括全局变量、全局对象、全局函数以及用于实现模块化编程的exports和module对象等内容,这些知识是学习Node.js应用开发的基础。
在这里插入图片描述

1、Node.js全局对象

全局,即程序中任何地方都可以使用,Node.js内置了多个全局变量、全局对象和全局函数,在开发Node.js程序时都可以使用,下面分别对它们进行讲解。

1.1、全局变量

Node.js中的全局变量有两个,分别是__filename和__dirname,它们的说明如下:

  • __filename全局变量:__filename表示当前正在执行的脚本的文件名,包括文件所在位置的绝对路径,但该路径和命令行参数所指定的文件名不一定相同。如果在模块中,则返回的值是模块文件的路径。
  • __dirname全局变量:__dirname表示当前执行的脚本所在的目录。

例如,下面代码用来分别输出Node.js中两个全局变量的值:

console.log('当前文件名:',__filename);
console.log('当前目录:',__dirname);

程序运行效果如下图所示:
在这里插入图片描述

1.2、 全局对象

全局对象可以在Node.js程序的任何地方进行访问,它可以为程序提供经常使用的特定功能。Node.js中的全局对象如下表所示:
在这里插入图片描述
接下来分别讲解console对象和process对象的使用。

1、console对象

console对象提供了Node.js控制台的标准输出,其常用方法及说明如下表所示:
在这里插入图片描述

(1)console.log()方法:在console.log()方法中,可以使用占位符输出变量(如数字变量、字符串变量和JSON变量等),常用的占位符如下表所示:
在这里插入图片描述
例如,下面代码使用%d占位符输出一个整数值:

console.log('变量的值是:%d',57);

上面代码中,在console.log()方法里添加了两个参数。第一个参数是字符串’变量的值是:%d’,第二个参数是数字57。其中,%d是占位符,会寻找后面位置的数字,因为第二个参数57,紧紧跟在后面,所以输出结果如下:

变量的值是:57

使用console.log()方法输出内容时,还可以有多个占位符,示例代码如下:

console.log('%d+%d=%d',273,52,273+52);
console.log('%d+%d=%d',273,52,273+52,52273);
console.log('%d+%d=%d & %d',273,52,273+52);

上面代码运行效果如下:

273+52=325
273+52=325 52273
273+52=325 & %d

观察代码可以发现,第1行代码中,占位符的个数是3个,后面的数字变量的个数也是3个,所以输出结果是“273+52=325”;第2行代码中,占位符的个数是3个,但是后面数字变量的个数是4个,输出结果“273+52=32552273”,说明多出的数字变量52273原样输出;第3行代码中,占位符的个数是4个,但是后面数字变量的个数是3个,输出结果“273+52=325 & %d”,说明多余的占位符没有找到匹配的数字变量,只能原样输出。

使用其他占位符的示例代码如下:

console.log('字符串 %s','hello world','和顺序无关');
console.log('JSON %j',{name:'Node.js'});

上面代码运行效果如下:

字符串 hello world 和顺序无关
JSON {"name":"Node.js"}

(2)console.time()方法和console.timeEnd()方法:console.time()方法和console.timeEnd()方法用来记录程序的执行时间段。console.time()方法用来开始计时,其参数只是起到标识的作用;console.timeEnd()方法用来结束计时,并输出程序运行所需的时间,它在显示结果时,会在标识参数后面自动添加以毫秒为单位的时间。例如,下面代码用来输出执行10的阶乘运算所需要的时间:

//开始计时
console.time('时间');
var output = 1;
for (var i = 1; i <= 10; i++) {output *= i;
}
console.log('Result:', output);
//结束计时,并输出程序执行时间
console.timeEnd('时间');
Result: 3628800
时间: 11.027ms

说明
程序的执行时间不是固定时间,它与计算机配置有关。

2、process对象

process对象用于描述当前程序的状态,与console对象不同的是,process对象只在Node.js中存在,在JavaScript中并不存在该对象。process对象的常用属性及说明如下表所示:
在这里插入图片描述
process对象的常用方法及说明如下表所示:
在这里插入图片描述
输出process对象常用属性的值:

console.log('- process.env:', process.env);
console.log('- process.version:', process.version);
console.log('- process.versions:', process.versions);
console.log('- process.arch:', process.arch);
console.log('- process.platform:', process.platform);
console.log('- process.connected:', process.connected);
console.log('- process.execArgv:', process.execArgv);
console.log('- process.exitCode:', process.exitCode);
console.log('- process.mainModule:', process.mainModule);
console.log('- process.release:', process.release);
console.log('- process.memoryUsage():', process.memoryUsage());
console.log('- process.uptime():', process.uptime());

运行效果如下:

- process.env: {USERDOMAIN_ROAMINGPROFILE: 'DESKTOP-05BA7LG',LOCALAPPDATA: 'C:\\Users\\XIAOKE\\AppData\\Local',PROCESSOR_LEVEL: '6',……
}
- process.version: v19.0.1
- process.versions: {node: '19.0.1',v8: '10.7.193.13-node.16',uv: '1.43.0',zlib: '1.2.11',brotli: '1.0.9',ares: '1.18.1',modules: '111',nghttp2: '1.47.0',napi: '8',llhttp: '8.1.0',openssl: '3.0.7+quic',cldr: '41.0',icu: '71.1',tz: '2022b',unicode: '14.0',ngtcp2: '0.8.1',nghttp3: '0.7.0'
}
- process.arch: x64
- process.platform: win32
- process.connected: undefined
- process.execArgv: []
- process.exitCode: undefined
- process.mainModule: Module {id: '.',path: 'K:\\nodepro',exports: {},filename: 'K:\\nodepro\\index.js',loaded: false,children: [],paths: [ 'K:\\nodepro\\node_modules', 'K:\\node_modules' ]
}
- process.release: {name: 'node',sourceUrl: 'https://nodejs.org/download/release/v19.0.1/node-v19.0.1.tar.gz',headersUrl: 'https://nodejs.org/download/release/v19.0.1/node-v19.0.1-headers.tar.gz',libUrl: 'https://nodejs.org/download/release/v19.0.1/win-x64/node.lib'
}
- process.memoryUsage(): {rss: 28078080,heapTotal: 6639616,heapUsed: 6031272,external: 455122,arrayBuffers: 17378
}
- process.uptime(): 0.095098

1.3、全局函数

全局函数,即可以在程序的任何地方调用的函数,Node.js主要提供了6个全局函数,其说明如下表所示:
在这里插入图片描述
下面对Node.js中全局函数的使用进行讲解。

1、setTimeout(cb,ms)和clearTimeout(t)

这两个全局函数分别用来设置和取消一个定时器,此处需要说明的是,setTimeout(cb,ms)设置的定时器仅调用一次指定的方法。示例代码如下:

var timer=setTimeout(function(){console.log("您将在2秒后看到这句话")
},2000)
//clearTimeout(timer)

运行上面代码,2秒后将会显示如下内容:

您将在2秒后看到这句话

如果将上面代码中的最后一行取消注释,则运行程序时不会输出任何内容,因为虽然前3行代码添加了一个定时器,但是第4行又取消了该定时器,所以在控制台不会输出内容。

2、setInterval(cb,ms)和clearInterval(t)

这两个全局函数分别用来添加和取消一个定时器。其中参数cb为要执行的函数;ms为调用cb函数前等待的时间;t表示要取消的setInterval()方法设置的定时器。使用setInterval()方法设置定时器与使用setTimeout()方法设置定时器的区别是,使用setInterval()方法设置的定时器可以多次调用指定的方法,而使用setTimeout()方法设置的定时器只能调用一次指定的方法。示例代码如下:

var i = 0                              //记录执行程序的次数
var timer
timer = setInterval(function () {i += 1console.log("已执行" + i + "次")if (i >= 5) {clearInterval(timer)         //执行5次后,取消定时器console.log("执行完毕")}
}, 2000)

运行上面的代码,每隔2秒会显示一次执行函数的次数,直到执行5次以后,取消定时器,最终输出结果如下:

已执行1次
已执行2次
已执行3次
已执行4次
已执行5次
执行完毕

3、setImmediate(callback[,…args])和clearImmediate(immediate)

这两个全局函数用来安排在I/O事件的回调之后立即执行的函数,以及取消setImmediate()创建的Immediate对象。其中,callback参数指的是要执行的函数,immediate参数表示使用setImmediate()创建的Immediate对象。

说明
I/O(input/output)即输入/输出,通常指数据在内部存储器与外部存储器或其他周边设备之间的输入和输出。

示例代码如下:

console.log("正常执行1");
var a = setImmediate(function () {console.log("我被延迟执行了");
});
console.log("正常执行2")
//clearImmediate(a)

上面代码的运行结果如下:

正常执行1
正常执行2
我被延迟执行了

如果将最后一行代码取消注释,则运行结果如下:

正常执行1
正常执行2

2、模块化编程

Node.js主要使用模块系统进行编程,所谓模块,是指为了方便调用功能,预先将相关方法和属性封装在一起的集合体。模块和文件是一一对应的,即一个Node.js文件就是一个模块,这个文件可以是JavaScript代码、JSON或者编译过的C/C++扩展等。下面对Node.js模板化编程中用到的两个对象exports和module进行解析。

2.1、exports对象

在Node.js中创建模块需要使用exports对象,该对象可以共享方法、变量、构造和类等,下面通过一个实例讲解如何使用exports创建一个模块。

使用exports对象实现模块化编程,步骤如下:
(1)在WebStorm中创建一个module.js文件,其中通过exports对象共享求绝对值和计算圆面积的方法,代码如下:

//求绝对值的方法abs
exports.abs = function (number) {if (0 < number) {return number;} else {return -number;}
};
//求圆面积的方法circleArea
exports.circleArea = function (radius) {return radius * radius * Math.PI;
};

(2)在WebStorm中创建一个main.js文件,用来调用前面创建的模块来计算指定值的绝对值及指定半径的圆面积,代码如下:

//加载module.js模块文件
var module = require('./module.js');
//使用模块方法
console.log('abs(-273) = %d', module.abs(-273));
console.log('circleArea(3) = %d', module.circleArea(3));

说明
上面代码中,通过使用require()导入了创建的module.js模块文件。

运行main.js文件,结果如下:

abs(-273) = 273
circleArea(3) = 28.274333882308138

2.2、module对象

在Node.js中,除了使用exports对象进行模块化编程,还可以使用module对象进行模块化编程。module对象的常用属性如下表所示:
在这里插入图片描述
使用module对象实现模块化编程,步骤如下:
(1)在WebStorm中创建一个module.js文件,其中定义一个输出方法,然后通过module对象的exports属性指定对外接口,代码如下:

function Hello() {var name;this.setName = function (thyName) {name = thyName;};this.sayHello = function () {console.log(name + ',你好');};
};
module.exports = Hello;

(2)在WebStorm中创建一个main.js文件,用来调用创建的模块以输出内容,代码如下:

var Hello = require('./module.js');
hello = new Hello();
hello.setName('2023');
hello.sayHello();

运行main.js文件,结果如下:

2023,你好

注意
与使用exports对象相比,唯一的变化是使用module.exports = Hello代替了exports。在外部引用该模块时,其接口对象就是要输出的Hello对象本身,而不是原先的exports。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/175251.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【libGDX】加载G3DJ模型

1 前言 libGDX 提供了自己的 3D 格式模型文件&#xff0c;称为 G3D&#xff0c;包含 g3dj&#xff08;Json 格式&#xff09;和 g3db&#xff08;Binary 格式&#xff09;文件&#xff0c;官方介绍见 → importing-blender-models-in-libgdx。 对于 fbx 文件&#xff0c;libGDX…

python中的简单线性拟合

简单线性回归可以拟合线性关系的数据&#xff0c;一般使用一次函数或二次函数即可。 import numpy as np import matplotlib.pyplot as pltxnp.array([1,2,3,4,5,6,7,8,9,10]) ynp.array([2.5,4.5,4.8,5.5,6.0,7.0,7.8,8.0,9.0,10.0])#一次拟合函数 slope,interceptnp.polyfit…

不受平台限制,Sketch 网页版震撼登场

Sketch 是一种基于 Mac 的矢量图形编辑器&#xff0c;可用于数字设计。其主要功能包括无损矢量编辑、完美像素精度和数百个插件同步功能&#xff0c;可导出预设和代码。它是目前流行的页面交互协作设计工具。但是 Sketch 最大的缺点是对 Windows/PC 用户不友好。严格来说&#…

使用 Java 来读取 Excel 文件,检查每一行中的 URL,并将不符合条件的行标记为红色

-- 日、时、分、秒&#xff0c;这是计时的单位&#xff0c;惜时就应该惜日、惜时、惜分、惜秒。 用 Java 来读取 Excel 文件&#xff0c;检查每一行中的 URL&#xff0c;并将不符合条件的行标记为红色。以下是一个简单的示例&#xff0c;使用 Apache POI 进行 Excel 操作&#…

vue3+ts v-model 深度学习

<template><div><h1>我是App.vue组件</h1><div>isShpw:{{ isShow }}</div><div>text:{{ text }}</div><div><button click"isShow !isShow">开关</button></div><hr /><vModeVal…

在Matlab里安装gurobipy怎么安装教程

在Matlab 里安装gurobipy 先在CMD里激活&#xff0c; 然后添加系统环境变量 GRB_LICENSE_FILEC:\gurobi10.2\gurobi.lic 然后输入 addpath(D:\gurobi1003\win64\matlab) addpath(C:\gurobi1003\win64\matlab) addpath(C:\gurobi1002\win64\matlab) C:\gurobi1003\win64\m…

Excel如何比较两列数据的不同

当遇到exel有两个列表的数据&#xff0c;需要比较得到他们的不同的部分&#xff0c;并且得到一个不同的值的列表。示例如下&#xff1a; 目的是&#xff1a;通过比较&#xff0c;知道Column2的哪些值不在在Column1里。 WPS直接提供了这一个功能&#xff0c;如下图&#xff1a;…

【日常总结】Swagger 3.0 + 集成 knife4j ,并设置header入参

一、场景 环境&#xff1a; 二、问题 思路 &#xff1a; 三、解决方案 &#xff08;推荐&#xff09; Stage 1&#xff1a;接入knife4j 依赖 Stage 2&#xff1a;修改 yaml 配置 Stage 3&#xff1a;修改 swagger 3 配置文件 Stage 4&#xff1a;查看效果 Swagger UI …

python爬虫实习找工作练习测试(以下内容仅供参考学习)

要求&#xff1a;获取下图指定网站的指定数据 空气质量状况报告-中国环境监测总站 输入&#xff1a;用户输入下载时间范围&#xff0c;格式为2022-10 输出&#xff1a;将更新时间在2022年10月1日到31日之间的文件下载到本地目录&#xff08;可配置&#xff09;&#xff0c;并…

WordPress:构建强大的网站和博客的完美选择

WordPress&#xff1a;构建强大的网站和博客的完美选择 一、WordPress 简介1.1 WordPress 介绍1.2 WordPress 优势 二、部署LNMP环境2.1 前提条件2.2 关闭防火墙和SELinux2.3 安装Nginx2.4 安装MySQL2.5 安装PHP2.6 配置Nginx2.7 配置MySQL2.8 配置PHP2.9 测试访问LNMP平台 三、…

【vue_3】关于超链接的问题

1、需求2、修改前的代码3、修改之后&#xff08;1&#xff09;第一次&#xff08;2&#xff09;第二次&#xff08;3&#xff09;第三次&#xff08;4&#xff09;第四次&#xff08;5&#xff09;第五次 1、需求 需求&#xff1a;要给没有超链接的列表添加软超链接 2、修改前…

【密码学引论】分组密码

第三章 分组密码 DES、IDEA、AES、SM4 1、分组密码定义&#xff08;按照五个组成部分答&#xff09; 密钥空间&#xff1a;属于对称加密算法kekd明密文空间&#xff1a;将明文划分为m比特的组&#xff0c;每一块依次进行加密加解密算法&#xff1a;由key决定一个明文到密文的…

011 OpenCV warpAffine

目录 一、环境 二、warpAffine原理 三、完整代码 一、环境 本文使用环境为&#xff1a; Windows10Python 3.9.17opencv-python 4.8.0.74 二、warpAffine原理 warpAffine是OpenCV库中的一个函数&#xff0c;它用于执行二维仿射变换。这个函数接受一个输入图像和变换矩阵&…

二叉树的递归套路(1)

与其明天开始&#xff0c;不如现在行动&#xff01; 文章目录 是否平衡二叉树 &#x1f48e;总结 是否平衡二叉树 题目 给定一颗二叉树的头节点head&#xff0c;返回这颗二叉树是不是平衡二叉树 平衡二叉树就是这个树的所有子树和它自己&#xff0c;左右子树高度差不超过1 递归…

Rust语言入门教程(六) - 字符串类型

在Rust中&#xff0c; 字符串类型其实是一个比较复杂的话题。在Rust的标准库中&#xff0c;至少都提供了6种字符串类型&#xff0c;我们平常使用的最多的是其中的两种。这两种类型互相之间也有所关联&#xff1a; str&#xff1a; 字符串切片String 字符串 其中&#xff0c; 字…

Postman接口测试 —— 设置断言和集合运行

一、常见的5种断言方法 Postman是一款非常强大的API接口调式工具&#xff0c;它自带断言方法&#xff0c;不需要学习JavaScript脚本&#xff0c;非常方便。 &#xff08;1&#xff09;Status code&#xff1a;Code is 200(校验接口返回结果的状态码) &#xff08;2&#xff09…

python+feon有限元分析|求解实例

目录 1、feon框架结构 2. 支持的单元类型 3、实例 1、feon框架结构 包含三个包&#xff1a; sa&#xff1a;结构分析包 ffa&#xff1a;流体分析包 derivation&#xff1a;刚度矩阵包 2. 支持的单元类型 Spring1D11 - 一维弹簧单元 Spring2D11 - 二维弹簧单元 Spring…

MySQL运行在docker容器中会损失多少性能

前言 自从使用docker以来&#xff0c;就经常听说MySQL数据库最好别运行在容器中&#xff0c;性能会损失很多。一些之前没使用过容器的同事&#xff0c;对数据库运行在容器中也是忌讳莫深&#xff0c;甚至只要数据库跑在容器中出现性能问题时&#xff0c;首先就把问题推到容器上…

Java学习路线第一篇:Java基础(2)

这篇则分享Java学习路线第一part&#xff1a;Java基础&#xff08;2&#xff09; 从看到这篇内容开始&#xff0c;你就是被选定的天命骚年&#xff0c;将承担起学完Java基础的使命&#xff0c;本使命为单向契约&#xff0c;你可选择YES或者选择YES。 具体路线安排&#xff1a…

ubuntu 下载编译 opencv4.2.0并检验

如有帮助点赞收藏关注&#xff01; 如需转载&#xff0c;请注明出处&#xff01; ubuntu 的opencv4.2.0下载与编译 下载依赖开始编译安装配置OpenCV编译环境检验* 完成 下载 首先下载opencv源码网址&#xff1a; https://opencv.org/releases/page/3/ 下载成zip后&#xff0c;…