跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
JavaScriptNode.jsReact Native大前端

JavaScript 简介:从网页脚本到全栈语言

JavaScript 的发展历程、核心语法及生态系统。文章阐述了 JS 从浏览器脚本扩展到服务端(Node.js)、移动端和桌面端的能力。详细讲解了变量声明(var/let/const)、数据类型、类型转换、运算符、函数定义等基础语法。深入探讨了作用域、闭包、原型链等高级特性,以及异步编程的演进(回调/Promise/async-await)。最后对比了主流前端框架(React/Vue/Angular)及工程化工具,并梳理了 ECMAScript 版本历史。适合初学者入门及开发者系统复习。

咸鱼开飞机发布于 2026/3/28更新于 2026/7/1845 浏览
JavaScript 简介:从网页脚本到全栈语言

一门从'网页小脚本'成长为'世界语言'的神奇代码

如果说 HTML 是网页的骨架,CSS 是网页的皮肤,那 JavaScript 就是网页的肌肉和灵魂。它让网页从'静态说明书'变成了'动态应用'。如今,它早已跳出浏览器的围墙,成为全球最流行、应用最广泛的编程语言之一。

下面,我将从六个维度为你层层拆解这个'世界语言'的方方面面。

一、JavaScript 是什么?——从'LiveScript'到'世界语言'的逆袭

1.1 一个美丽的误会:名字的由来

1995 年,网景公司的工程师Brendan Eich只用了 10 天就创造了这门语言。它最初的名字叫'LiveScript',但当时 Java 语言正火,为了蹭热度,网景公司决定改名'JavaScript'。实际上,JavaScript 和 Java 除了语法都借鉴了 C 语言外,几乎没有任何关系。 这个'美丽的误会'一直延续到今天。

1.2 核心定义

JavaScript 是一种轻量级的、解释型的、面向对象的脚本语言。它最初被设计用来为网页添加交互性,如今已成为 Web 开发的核心技术,与 HTML、CSS 并称'前端三剑客'。

  • HTML:定义网页的内容(比如标题、段落、图片)
  • CSS:定义网页的样式(比如颜色、字体、布局)
  • JavaScript:定义网页的行为(比如点击弹窗、表单验证、动态加载数据)
1.3 它能做什么?——从浏览器到服务器,从应用到游戏

在浏览器里,JavaScript 几乎无所不能:

  • 在网页中添加新的 HTML,修改内容和样式
  • 响应用户的点击、鼠标移动、键盘输入
  • 向服务器发送网络请求,实现无刷新更新页面(这就是当年引爆 Web 2.0 的 Ajax 技术)
  • 获取或设置 Cookie,记住用户信息
  • 实现复杂的动画和游戏

但它的脚步远不止于此:

  • 服务器端:通过 Node.js,JavaScript 可以写后端服务、操作数据库
  • 移动端:通过 React Native、Weex 等框架,可以用 JS 写原生 App
  • 桌面端:通过 Electron,可以用 JS 写桌面应用(比如 VS Code、Slack)
  • 游戏开发:通过 HTML5 的 Canvas 和 WebGL,可以开发网页游戏

它不能做什么? 出于安全考虑,浏览器中的 JavaScript 不能直接读写硬盘上的文件、不能直接访问操作系统功能、也不能跨域访问任意网站的数据(除非对方允许)。

二、核心语法:一图看懂 JS 知识体系

在深入具体内容前,我们先通过一张Mermaid 总结框图,从宏观上把握 JavaScript 的知识体系。这张图涵盖了从基础到进阶、从浏览器到服务端的全貌。

文章配图

三、核心语法详解:从入门到进阶的必经之路

3.1 变量声明:var、let、const 的'三国杀'

在 JavaScript 中声明变量有三种方式,它们各有特点:

关键字作用域变量提升重复声明可否修改适用场景
var函数级是(初始值 undefined)允许可修改老代码兼容,现代开发已不推荐
let块级有暂时性死区不允许可修改需要重新赋值的变量
const块级有暂时性死区不允许不可重新赋值(但对象属性可改)常量、引用类型默认选择

一个经典示例:

if (true) {
  var x = 1; // var 不认花括号,x 会'逃'出 if
  let y = 2; // let 只在这个花括号内有效
  const z = 3; // const 也只在这个花括号内有效
}
console.log(x); // 输出 1
console.log(y); // 报错:y is not defined
console.log(z); // 报错:z is not defined

const 的特殊性:它禁止的是'重新赋值',而不是'内容修改'。所以 const obj = {a:1}; obj.a = 2; 是允许的,但 obj = {}; 会报错。

3.2 数据类型:七种原始类型 + 对象

JavaScript 的数据类型可以分为两大类:

原始类型(存储值本身):

  1. Number:数字,包括整数和小数,遵循 IEEE 754 标准。经典坑:0.1 + 0.2 === 0.3的结果是 false(实际是 0.30000000000000004)
  2. String:字符串,可以用单引号、双引号或反引号(模板字符串)
  3. Boolean:布尔值,true或 false
  4. Undefined:声明了变量但没赋值,就是 undefined
  5. Null:表示'空',是开发者主动设置的'没有值'
  6. Symbol(ES6 新增):独一无二的值,常用于对象属性名,避免冲突
  7. BigInt(ES2020 新增):表示任意大的整数,末尾加 n,如 9007199254740991n

引用类型(存储地址):

  • Object:对象,键值对集合
  • Array:数组,有序列表
  • Function:函数,也是对象的一种
  • Date、RegExp等内置对象
3.3 类型转换:隐式与显式

JavaScript 是动态类型语言,变量类型由赋值决定,且可以在运行时改变。

隐式转换(自动发生,有时会出人意料):

"3" + 4 + 5 // 结果是 "345"(字符串拼接)
3 + 4 + "5" // 结果是 "75"(先算 3+4=7,再转字符串拼"5")
"37" - 7 // 结果是 30(减号会触发数字转换)

显式转换(开发者主动调用):

Number("123") // 123
String(123) // "123"
Boolean(0) // false
parseInt("010", 10) // 10(一定要指定进制,否则可能被当成八进制)
3.4 运算符:三等号是好朋友

比较运算符的黄金法则:永远用 ===(严格相等)而不是 ==(相等)。

==会进行类型转换,导致一些匪夷所思的结果:

1 == true // true(因为 true 被转成 1)
"1" == true // true(字符串"1"转成数字 1,true 转成 1)
"" == false // true
null == undefined // true

而 ===会在比较前先检查类型,类型不同直接返回 false,更加安全可预测。

3.5 函数:一等公民

在 JavaScript 中,函数是第一等公民,这意味着它们可以像任何其他变量一样被传递、赋值给变量、作为参数传入、作为返回值返回。

三种定义方式:

// 函数声明(会提升)
function add(a, b) {
  return a + b;
}

// 函数表达式(不会提升)
const subtract = function(a, b) {
  return a - b;
};

// 箭头函数(ES6 新增,简洁,没有自己的 this)
const multiply = (a, b) => a * b;

四、进阶核心:JS 之所以强大的秘密

4.1 作用域与闭包:JS 面试的'必考题'

作用域决定了变量在哪里能被访问到。JavaScript 有三种作用域:

  • 全局作用域:在任何函数之外声明的变量,页面任何地方都可访问
  • 函数作用域:在函数内部用 var 声明的变量,只在函数内部可访问
  • 块级作用域:用 let和 const 声明的变量,只在 {} 内部可访问

闭包是 JavaScript 最强大的特性之一。简单说,闭包就是一个函数'记住'了它被定义时的作用域,即使它后来在其他地方执行。

function createCounter() {
  let count = 0; // 这个变量被'封闭'在返回的函数中
  return function() {
    count++;
    return count;
  };
}
const counter = createCounter();
console.log(counter()); // 1
console.log(counter()); // 2
// count 变量没有被销毁,它被闭包'记住'了

应用场景:创建私有变量、模块化、函数柯里化、防抖节流等。

4.2 原型与原型链:JS 的'继承密码'

JavaScript 的继承机制与众不同——它采用原型链实现继承,而不是传统的'类继承'(ES6 的 class 只是语法糖,底层仍是原型)。

核心概念:

  • 每个函数都有一个 prototype 属性
  • 每个对象都有一个 __proto__ 属性(指向其构造函数的 prototype)
  • 当你访问一个对象的属性时,如果对象本身没有,JS 会沿着 __proto__ 一路向上找,直到找到或到达 null
function Person(name) {
  this.name = name;
}
Person.prototype.sayHello = function() {
  console.log(`Hello, I'm ${this.name}`);
};
const alice = new Person('Alice');
alice.sayHello(); // 对象自身没有 sayHello,但它的原型上有

这就是为什么所有数组都可以用 push()、map()——它们都定义在 Array.prototype 上。

4.3 异步编程:从回调地狱到 async/await

JavaScript 是单线程的,但它通过事件循环实现了非阻塞的异步操作。

异步方案演进:

  1. 回调函数(最早的方式):
setTimeout(() => {
  console.log('3 秒后执行');
}, 3000);

问题:多个异步操作嵌套时,会形成'回调地狱'。

  1. Promise(ES6 引入):
fetch('/api/user')
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));

用链式调用解决嵌套问题。

  1. async/await(ES2017 引入,目前最优):
async function getUserData() {
  try {
    const response = await fetch('/api/user');
    const data = await response.json();
    console.log(data);
  } catch (error) {
    console.error(error);
  }
}

让异步代码'看起来像'同步代码,最直观易读。

事件循环机制:JS 维护一个'调用栈'和两个'任务队列'——微任务队列(Promise.then 等)和宏任务队列(setTimeout、事件回调等)。每执行完一个宏任务,都会清空所有微任务,然后再取下一个宏任务。这保证了任务的执行顺序。

五、运行环境:浏览器与 Node.js

5.1 浏览器中的 JavaScript

在浏览器中,JavaScript 可以访问一系列 API:

  • DOM 操作:document.getElementById()、document.createElement() 等,用于增删改查网页元素
  • BOM 操作:window、navigator、location、history 等,控制浏览器本身
  • 事件处理:addEventListener,响应用户的点击、输入等操作
  • 存储技术:cookie、localStorage、sessionStorage、IndexedDB,在浏览器端保存数据
  • 网络请求:fetch、XMLHttpRequest,与服务器通信
5.2 Node.js 中的 JavaScript

2009 年,Ryan Dahl 将 Chrome 的 V8 引擎搬到了服务器上,创造了Node.js。从此,JavaScript 可以写后端了。

Node.js 的核心能力:

  • 文件系统:fs 模块读写文件
  • HTTP 服务:http 模块创建 Web 服务器
  • 进程管理:process 对象获取环境信息
  • npm 生态:全球最大的包管理器,超过百万个开源包可用

六、现代工程化与生态

6.1 前端框架三巨头
  • React(Facebook 出品):组件化、虚拟 DOM、单向数据流、JSX 语法。适用于大型单页应用,还有 React Native 写移动端
  • Vue(尤雨溪创建):渐进式框架、轻量易上手、响应式数据绑定、模板语法。从简单页面增强到复杂 SPA 都适用
  • Angular(Google 维护):完整的 MVC 框架、TypeScript 优先、依赖注入、RxJS。适合大型企业级应用
6.2 工程化工具
  • 打包工具:Webpack(老牌)、Vite(新生代,极速)
  • 代码转换:Babel(将 ES6+ 代码转成兼容旧浏览器的代码)
  • 代码规范:ESLint(检查错误)、Prettier(格式化代码)
6.3 编译到 JS 的语言

如果你不喜欢 JavaScript 的某些特性,可以用其他语言写代码,然后'编译'成 JavaScript 运行:

  • TypeScript(微软):添加了静态类型,是现在大型项目的首选
  • Dart(Google):可用于 Flutter 开发,也能编译成 JS
  • Kotlin、Python等也有对应的 JS 编译方案

七、语言进化:ECMAScript 版本简史

JavaScript 的标准化版本叫ECMAScript(简称 ES)。2009 年的 ES5 奠定了现代 JS 的基础,2015 年的 ES6 是一次里程碑式的大更新。此后,ECMA 组织改为每年发布一个新版本,持续为语言注入活力。

重要版本与特性:

版本年份关键特性
ES31999正则表达式、异常处理
ES52009严格模式、JSON、数组方法(forEach/map 等)
ES6/ES20152015let/const、箭头函数、类、模块、Promise、解构赋值、模板字符串
ES20162016Array.includes、幂运算符
ES20172017async/await、Object.entries/values
ES20182018Rest/Spread 属性、Promise.finally
ES20192019Array.flat、Object.fromEntries
ES20202020可选链 (?.)、空值合并 (??)、BigInt、globalThis
ES20212021String.replaceAll、逻辑赋值运算符
ES20222022类私有字段、顶层 await
ES20242024管道运算符、Temporal API(全新日期时间处理)

总结

JavaScript 从 1995 年诞生至今,已经走过了三十多个年头。它从一个'被误解的小儿科目',成长为全球使用最广、生态最丰富、应用场景最多元的编程语言之一。

它的魅力在于:

  • 低门槛:写几行代码就能看到效果,成就感来得快
  • 高上限:闭包、原型、异步、事件循环,够你钻研很久
  • 无处不在:浏览器、服务器、移动端、桌面端、物联网,哪里都有它的身影
  • 活力无限:每年的新特性、层出不穷的框架、百万级的 npm 包,整个生态生机勃勃

如果你刚接触编程,JavaScript 会是一个很好的起点;如果你是老手,它依然值得你持续探索。正如一位开发者所说:'任何能用 JavaScript 写出来的应用,最终都会用 JavaScript 写出来'——这句话虽然夸张,但也侧面印证了这门语言的强大与包容。

目录

  1. 一门从“网页小脚本”成长为“世界语言”的神奇代码
  2. 一、JavaScript 是什么?——从“LiveScript”到“世界语言”的逆袭
  3. 1.1 一个美丽的误会:名字的由来
  4. 1.2 核心定义
  5. 1.3 它能做什么?——从浏览器到服务器,从应用到游戏
  6. 二、核心语法:一图看懂 JS 知识体系
  7. 三、核心语法详解:从入门到进阶的必经之路
  8. 3.1 变量声明:var、let、const 的“三国杀”
  9. 3.2 数据类型:七种原始类型 + 对象
  10. 3.3 类型转换:隐式与显式
  11. 3.4 运算符:三等号是好朋友
  12. 3.5 函数:一等公民
  13. 四、进阶核心:JS 之所以强大的秘密
  14. 4.1 作用域与闭包:JS 面试的“必考题”
  15. 4.2 原型与原型链:JS 的“继承密码”
  16. 4.3 异步编程:从回调地狱到 async/await
  17. 五、运行环境:浏览器与 Node.js
  18. 5.1 浏览器中的 JavaScript
  19. 5.2 Node.js 中的 JavaScript
  20. 六、现代工程化与生态
  21. 6.1 前端框架三巨头
  22. 6.2 工程化工具
  23. 6.3 编译到 JS 的语言
  24. 七、语言进化:ECMAScript 版本简史
  25. 总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • CCF-GESP 2025 年 12 月 C++ 四级真题解析
  • SpringBoot 省级旅游口号管理系统设计与实现
  • PPT 嵌入 VR 图片及全景图播放实操指南
  • SpringBoot 结合 Redis+Caffeine 多级缓存实践解析
  • OpenClaw.ai:Agentic AI 时代的 Spring Framework 时刻
  • Linux 进程间通信详解:管道、共享内存与 System V IPC 机制
  • Git for Windows 安装配置指南
  • AI 产品经理核心能力体系与学习路径指南
  • 微信小程序 Python 后端大学生心理健康服务系统设计
  • OpenClaw 漏洞预警:为 AI 代理构建可追溯的日志审计方案
  • OpenClaw Secure DM Pairing 机制解析与安全私信访问配置
  • 算法性能优化实战:从瓶颈定位到效率提升
  • Java 中对象的几种比较方式
  • 中国 AIGC 应用全景图谱发布及 2024 值得关注的企业产品榜单
  • Pi0 机器人 VLA 大模型在昇腾 A2 平台上的测评
  • GESP C++ 一级真题解析:手机电量显示
  • 从零搭建你的第一个 AI Agent
  • OpenClaw 开源汉化版安装与配置指南
  • 国产数据库新机遇:电科金仓融合技术与 AI 化演进
  • Linux 进程池实战:基于管道通信的任务分发系统实现

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online