JavaScript

JavaScript由以下几部分组成:

  • ECMAScript:JavaScript的核心语言部分,规定了语法、类型、语句、关键字、保留字、操作符、对象等。
  • DOM(文档对象模型):提供了访问和操作网页内容的方法和接口。
  • BOM(浏览器对象模型):提供了与浏览器交互的方法和接口,例如弹出新窗口、移动、缩放和关闭窗口等。

Node.js和浏览器都是JavaScript的运行环境,但它们之间有一些区别。

  • 全局对象:在浏览器中,全局对象是window,而在Node.js中,全局对象是global
  • API:浏览器和Node.js都提供了一些API,但它们之间的API有所不同。例如,浏览器提供了window.document对象,而Node.js提供了fs模块来操作文件系统。——由于nodejs中没有DOM和BOM,除了这些API,其他的ECMAscriptAPI基本都能用
  • 模块系统:在浏览器中,模块系统通常使用<script>标签来加载脚本文件。在Node.js中,使用require()函数来加载模块。
  • 异步编程:在浏览器中,异步编程通常使用回调函数来处理异步操作。在Node.js中,除了回调函数,还可以使用Promise、async/await等方式来处理异步操作。

浏览器环境中定义全局变量

1
2
3
var global = 'global'
// 全局变量已经挂载在window对象上
window.global = 'global'

Node环境定义全局变量

1
2
3
4
5
6
7
// globalVariable.js
// 通过global.xxx = xxx的方式定义,定义后可以在任何地方使用,但是不推荐这种方式,因为global是全局变量,污染了全局变量
global.globalVariable = 'globalVariable';

// main.js
require('./globalVariable.js');
console.log(globalVariable); // globalVariable
CommonJS是基于运行时的同步加载,要注意代码的执行顺序
1
2
3
// main.js
console.log(globalVariable); // undefined
require('./globalVariable.js');

Node.jsv18以后可以使用globalThis关键字定义全局变量,在node环境和浏览器环境下都可以运行。

Nodejs的内置全局API

__filename 当前文件的绝对路径

1
console.log(__filename); // /Users/xiuji/Desktop/workplace/own/Node/main.js

__dirname 当前文件所在文件夹的绝对路径

1
console.log(__dirname); // /Users/xiuji/Desktop/workplace/own/Node

setTimeout 定时器

1
2
3
setTimeout(() => {
console.log('setTimeout');
}, 1000);

setInterval 循环定时器、 clearInterval 清除循环定时器

1
2
3
4
5
6
7
8
9
10
let num = 0;
const interval = setInterval(() => {
num++;
console.log(num);
if (num === 10) {
console.log('clearInterval');
// clearInterval: 清除循环定时器
clearInterval(interval);
}
}, 1000);

process 进程对象

process.argv :这是一个包含命令行参数的数组。第一个元素是Node.js的执行路径,第二个元素是当前执行的JavaScript文件的路径,之后的元素是传递给脚本的命令行参数。

process.env: 这是一个包含当前环境变量的对象。您可以通过process.env访问并操作环境变量。

process.pid: 这个属性返回当前进程的PID(进程ID)。

process.platform: 获取当前系统平台

process.exit(): 退出当前进程

process.on(): 监听事件

1
2
3
4
5
6
7
8
9
10
11
12
// process 进程对象
// process.nextTick(): 立即执行函数
process.nextTick(() => {
console.log('nextTick');
});
// process.on(): 监听事件
process.on('exit', () => {
console.log('exit');
});
process.on('beforeExit', () => {
console.log('beforeExit');
});

Buffer 缓冲区对象