|
打开任何一个现代网站,网站背后几乎都有JavaScript在跑。网站你点一个按钮,网站弹出一张图片,网站表单实时校验,网站页面不刷新就更新内容——这些全是网站JS干的。没有它,网站网页就是网站一张印死的传单。 1995年,网站Brendan Eich在网景公司用十天时间写出了这门语言。网站十天。网站名字改了好几轮,网站最后叫JavaScript,网站其实跟Java没什么关系。网站这个命名纯粹是网站当年市场部想蹭Java的热度。事情就是这么草率地开始了。 它到底在浏览器里做什么 HTML是骨架,CSS是皮肤,JS是肌肉和神经。浏览器加载页面时,解析HTML生成DOM树,JS可以读写这棵树上的任何节点。你右键“检查元素”,看到的那些实时变化的结构,很多就是JS改过的。 举个具体的例子。你在搜索框里打字,下方立刻出现联想词。这个过程没有刷新页面,是JS监听了键盘事件,拿输入内容去请求服务器,再把返回的数据渲染到页面上。整套动作在几百毫秒内完成。 再比如购物车。你点“加入购物车”,页面右上角的数字从3变成4。这个数字不是重新加载页面算出来的,是JS在本地更新了DOM,同时发了一个请求告诉服务器。用户感知到的就是“快”。 Node.js把JS拽出了浏览器 2009年之前,JS只能在浏览器里跑。Node.js出现后,JS可以写服务端了。同一个语言从前端写到后端,这件事对开发效率的影响比很多人想象的大。 一个团队不用在Python和JS之间来回切换思维。前端的工具链——npm、webpack、vite——全部跑在Node上。你现在打开一个前端项目,node_modules文件夹动辄几百兆,这已经成了日常。 但Node也不是没有代价。单线程事件循环处理CPU密集任务会卡。所以真正重计算的场景,还是得靠Go、Rust或者C++来扛。 框架战争没停过 jQuery统治了一个时代。它的核心价值是抹平浏览器差异——当年IE和Firefox的API不一样,jQuery帮你统一了。2010年前后,不会jQuery几乎找不到前端工作。 后来React、Vue、Angular起来了。React用虚拟DOM和组件化改变了写法,Vue在国内中小团队里铺得特别广,Angular相对重,企业级项目用得多。再往后Svelte、Solid这些新秀开始挑战“运行时”这个概念本身。 框架换来换去,底层还是JS。你学React,写的是JSX,编译完还是JS。你学Vue,模板语法最终也编译成JS。逃不掉的。 TypeScript是另一条路 JS是动态类型,变量可以随时从数字变成字符串。小项目无所谓,大项目里这是灾难。TypeScript给JS加了类型系统,编译时就能发现很多低级错误。 微软2012年发布TS,现在几乎成了大型前端项目的默认选择。Angular直接用TS写,Vue 3用TS重写,React的类型定义也早就完善了。你写的是TS,编译产物是干净的JS,浏览器照跑不误。 它不完美,但没得选 JS有很多让人皱眉的地方。==的隐式类型转换、this的指向、浮点数精度问题——0.1加0.2不等于0.3,这个坑每个新手都会踩。但浏览器只认它。WebAssembly想替代一部分场景,可它目前更多是补充,不是取代。 你打开任何一个网页,按F12,Console里敲一行代码回车,立刻就能看到结果。这种即时反馈是JS最迷人的地方。门槛低到几乎不存在,但天花板高得离谱。同一个语言,有人写一行弹窗,有人写整个Photoshop网页版。 这就是JS网站的真实面貌。它不优雅,但无处不在。 |