JavaScript 是 Web 开发的核心,因为只有它能直接操作 DOM、调用浏览器 API;其他语言无法访问 document 或 window,Node.js 也缺乏 Web API;JS 虽为解释型语言JavaScript 是浏览器里唯一能直接跑起来的编程语言——没有它,网页就是一张不能动的海报。,但现代开发需工程化与类型约束。
因为只有 JavaScript 能在浏览器中直接读写 document 对象。HTML 和 CSS 只负责“画出来”,而 JS 才是那个能点击后删掉一个 li、输入时实时校验邮箱、滚动到一半自动加载更多内容的执行者。
document 或 window —— 它们不是宿主环境的一部分document.getElementById()、element.addEventListener() 这些 API 是浏览器提供的,但只能由 JS 调用Node.js 让 JavaScript 跑在服务器上,但它没有 document、localStorage、fetch(早期版本)、setTimeout 等 Web API —— 这些是浏览器环境独有的。
document.querySelector('button'),会立刻报错:ReferenceError: document is not defined
fs.readFile() 也会失败,因为 fs 是 Node.js 的模块,浏览器不提供误以为“不用编译 = 不需要工程化”或“动态类型 = 不用关心类型”。结果是:调试时满屏 undefined is not a function,接口返回结构一变就炸,重构时不敢动函数参数。
片段typeof null === 'object' 就是个经典坑),函数入参和返回值没约束,靠人肉维护const/let 替代 var,加 'use strict';,再配个轻量 TS(比如只加 // @ts-check)因为所有其他前端技术都建立在它之上:React 渲染靠 JS 执行 JSX;Vue 的响应式依赖 Proxy 和 Object.defineProperty;CSS-in-JS、构建工具链、PWA 的 serviceWorker 注册……全都要 JS 启动。
react.development.js,本质是在浏览器里执行一段 JS;你写 vue.createApp(),也是调用 JS 函数WebAssembly.instantiateStreaming(fetch('./module.wasm'))
document 接口,也不会让 Go 直接监听 click 事件。这个事实没得商量,也不需要投票。