Node环境和浏览器环境
浏览器跑在用户电脑里专门用来渲染网页、和用户交互。Node.js跑在服务器 / 本地电脑里专门用来做后端、工具、脚本。它们都用 V8 引擎执行 JS但能调用的 API、权限、用途完全不同。一.全局对象浏览器全局对象window所有全局变量、DOM、BOM 都挂在window上。window.alert(1)window.console.log(2)window.document.getElementById()window.location.hrefwindow.addEventListener(scroll, fn)Node 全局对象globalglobal.console.log()global.setTimeout()global.processglobal.moduleglobal.require()Node 没有 window、没有 document、没有 DOM二.使用的 API 完全不同浏览器能做、Node 不能做DOM 操作document、getElementByIdBOMlocation、history、navigator弹窗alert、confirm事件scroll、click、resize本地存储localStorage、sessionStorageCookie跨域限制Node 能做、浏览器不能做文件操作fs 模块读文件、写文件网络服务http 模块启动服务器操作系统信息os、path、process多进程、子进程直接操作计算机硬件 / 权限运行脚本、打包工具webpack、vite三. 模块系统不一样浏览器ES6 模块import / export早期无模块化Node支持CommonJSrequire() / module.exports也支持 ES6 模块有内置模块fs、path、http、url、querystring…四.this 指向不一样浏览器全局 this → window普通函数 this → window非严格模式事件函数 this → 触发元素Node全局 this → global最关键Node 顶级作用域 this {}普通函数 this → global非严格五.运行机制事件循环不一样浏览器事件循环执行同步代码执行微任务Promise.then、queueMicrotask渲染页面执行宏任务setTimeout、setInterval、I/ONode 事件循环14 版本已和浏览器趋同但底层阶段不同timerspending callbacksidle/preparepollcheckclose callbacks六.安全权限浏览器沙箱环境权限极低不能读本地文件不能访问操作系统不能随意发请求跨域限制不能操作硬件Node权限极高可以读写本地任意文件可以启动服务、监听端口可以操作进程、系统信息没有跨域限制七.用途不同浏览器前端页面用户交互渲染 HTML/CSS/JS发送 AJAX/fetchNode服务器Express/Koa/Nest构建工具Webpack/Vite脚本工具接口服务爬虫桌面应用Electron[补充]setTimeout返回不同✅ 浏览器Chrome/FirefoxsetTimeout返回数字number叫 timeoutID 定时器编号✅ Node.js 环境setTimeout返回一个Timeout对象字段[Symbol(kAsyncId)]: 22就是那个定时器 ID 编号藏在对象内部 Symbol 属性里。特点浏览器Node.js全局对象windowglobal/globalThisDOM✅有❌无BOM✅有❌无文件操作❌不能✅fs 模块服务器❌不能✅http 模块模块化ESModuleCommonJS ESModule权限沙箱、受限高权限setTimeout 返回数字 IDTimeout 对象thiswindow{} / global