客户端JS和服务器JS虽然语法相同,但运行环境不同,导致它们能做的事情完全不同,客户端JS运行在浏览器中,负责界面交互和动态效果;服务器JS(如Node.js)运行在服务器上,负责处理请求、访问数据库和文件系统。
客户端JS和服务器JS:运行环境为什么是根本区别?
浏览器沙箱 vs 服务器全权限
客户端JS被困在浏览器的沙箱里,它没法直接读写你电脑上的文件,也没法监听端口启动服务,浏览器为了安全,把JS的权限限制得很死,服务器端JS就自由多了,以Node.js为例,它可以直接调用操作系统的接口,比如读写文件、创建网络连接、启动子进程,行业共识认为,这种权限差异是两者最根本的分水岭。
代码存放与执行位置
客户端JS代码通过HTML标签嵌入页面,浏览器下载后逐行解析执行,服务器端JS代码存放在服务器上,由Node.js运行时启动,常年运行在后台等待请求,一个典型的场景是:你写一个登录功能,前端JS负责收集表单数据、做基本的格式校验,后端JS负责接收数据、查询数据库、返回结果,前者在用户电脑上跑,后者在服务器上跑。
全局对象完全不一样
客户端JS全局对象是window,挂载着document、location、history等与浏览器页面相关的成员,服务器端JS全局对象是global,没有DOM,但有process、Buffer、__dirname等,很多初学者在Node.js里写document.getElementById会报错,就是没搞清这个区别。
浏览器JS和Node.js的API差异在哪里?
客户端JS专注DOM操作与用户交互
客户端JS的核心能力是操作DOM树:增删改查页面元素、绑定事件、修改样式,它还能用fetch或XMLHttpRequest发网络请求,用localStorage做本地存储,用canvas画图,这些API浏览器都封装好了,直接调用即可,据统计,大部分前端开发者日常工作中80%的代码都在和DOM或事件打交道。

服务器JS擅长文件、网络与系统操作
Node.js提供了fs模块读写文件,http模块创建HTTP服务,crypto模块做加密,os模块获取系统信息,这些是浏览器JS根本没有的,举个例子,你想把用户上传的图片保存到磁盘,客户端JS做不到,必须把文件传到服务器端,再用Node.js的fs.writeFile写进去,同样,访问MySQL或Redis数据库,也只能在服务器端完成。
模块加载机制不同
客户端JS通常用ES Module,通过
