浏览器环境和 Node.js 环境主要有以下几个区别:
全局对象:在浏览器环境中,全局对象是
window
,而在 Node.js 环境中,全局对象是global
。运行环境:浏览器环境主要用于运行前端代码,与用户直接交互,如操作 DOM、处理用户事件等。Node.js 环境主要用于运行服务器端代码,如文件操作、数据库操作、网络请求等。
模块系统:浏览器环境原生支持 ES6 模块,也可以通过工具如 webpack 支持 CommonJS 或 AMD 等模块系统。Node.js 环境原生支持 CommonJS 模块,也开始支持 ES6 模块。
API:浏览器环境提供了诸如
document
、XMLHttpRequest
、fetch
、requestAnimationFrame
等 API,用于 DOM 操作、网络请求、动画等。Node.js 环境提供了诸如fs
、http
、crypto
、path
等 API,用于文件操作、网络编程、加密、路径处理等。安全性:由于浏览器环境直接与用户交互,因此有严格的安全限制,如同源策略、内容安全策略等。Node.js 环境运行在服务器端,没有这些限制,可以自由地访问文件系统、监听网络端口等。
事件循环:虽然浏览器环境和 Node.js 环境都是基于事件循环的,但它们的实现有所不同。浏览器环境的事件循环主要处理 GUI 渲染、用户交互、网络请求等任务。Node.js 环境的事件循环主要处理 I/O 操作、定时器、网络请求等任务。
2、 node 环境没有 Blob吗
是的,Node.js 环境中默认是没有
Blob
类型的。Blob
是浏览器提供的一个 API,用于操作大型二进制对象,例如文件。在 Node.js 中,我们通常使用
Buffer
或者流(Stream)来处理二进制数据。Buffer
类在 Node.js 核心 API 中提供,可以用于在内存中存储和操作原始字节。如果你确实需要在 Node.js 中使用
Blob
,你可以考虑使用第三方库,例如 fetch-blob。这个库提供了一个兼容浏览器Blob
API 的实现,可以在 Node.js 中使用。安装
fetch-blob
:
npm install fetch-blob
import('fetch-blob').then((module) => {
// console.log(module, 'module.default');
// let blob1 = new module.Blob(['123'], {type: 'text/plain'});
// console.log(blob1+'1', 'blob1');
});
// 创建一个长度为 10 的 Buffer,填充为 0
const buf1 = Buffer.alloc(10);
console.log(buf1, 'buf1');//<Buffer 00 00 00 00 00 00 00 00 00 00>
buf1.write('123');
console.log(buf1, 'buf1');//<Buffer 31 32 33 00 00 00 00 00 00 00>
// 读取 Buffer 中的数据
for (let i = 0; i < buf1.length; i++) {
console.log(buf1[i]); // 打印每个字节 // 49 50 51 0 0 0 0 0 0 0
}
//读取 Buffer 中的数据
console.log(buf1.toString()); /// 123
关于 Node.js 中 Buffer 的学习,你可以参考以下在线资源:
- Node.js 官方文档:https://nodejs.org/api/buffer.html
- Node.js Buffer 教程:https://nodejs.dev/learn/nodejs-buffers
- NodeSchool 的 bytewiser 教程:https://github.com/NodeSchool/bytewiser
- YouTube 上的 Node.js Buffer 教程:https://www.youtube.com/watch?v=HJlHJqB-UFw
这些资源将帮助你理解 Buffer 的基本概念,如何创建和操作 Buffer,以及 Buffer 在实际应用中的用途