JavaScript 语法


关键点

  • 研究表明,JavaScript 语法包括基本结构、数据类型、变量、运算符和控制结构。
  • 它似乎可能支持动态类型和块作用域变量,最新版本如 ECMAScript 2024 引入新特性。
  • 存在争议:分号使用是否强制,建议显式添加以避免问题。

JavaScript 语法简介

JavaScript 是一种多范式、动态的编程语言,广泛用于 Web 开发。以下是其语法的核心部分,适合初学者快速上手。

基本结构

  • 语句通常以分号 (;) 结束,但可以省略,建议显式添加。
  • 语句块用 {...} 包围,缩进 4 空格提高可读性。
  • 示例:if (x > 0) { console.log("x 是正数"); }

数据类型和变量

  • 有 7 种原始类型:Number、BigInt、String、Boolean、Symbol、Undefined、Null。
  • 变量用 let(块作用域,可变)、const(块作用域,不可变赋值)或 var(函数作用域,不推荐)声明。
  • 示例:let a = 1; const obj = {}; obj.a = 1;

运算符和控制结构

  • 运算符包括算术 (+, -, *, / 等)、比较 (<, > 等)和逻辑 (&&, ||, !)。
  • 控制结构有 if...elseswitch 和各种循环(如 for, for...of)。
  • 示例:if (name === "puppies") { name += " woof"; }

最新更新

ECMAScript 2024 引入新特性如 Object.groupByPromise.withResolvers,增强功能。



详细报告

JavaScript 是一种轻量级、解释型的编程语言,最初设计为嵌入 HTML 的脚本,用于增强网页互动性。根据 2025 年 6 月 8 日的最新信息,其语法基于 Java 和 C 语言,受到 Awk、Perl 和 Python 的影响,支持面向对象、指令式和函数式编程。以下是 JavaScript 语法的全面讲解,涵盖基本结构、数据类型、变量、运算符、控制结构和最新更新。

1. 基本结构

JavaScript 的语法规则定义了语言的结构,包括语句、语句块和注释等。

  • 语句(Statements):
  • 每个语句通常以分号 (;) 结束,但由于浏览器的自动分号插入 (ASI) 机制,分号可以省略。研究表明,显式添加分号被认为是最佳实践,以避免潜在的语义问题。
  • 示例:var x = 1;
  • 争议:部分开发者省略分号以简化代码,但可能导致运行时错误,建议始终使用。
  • 语句块(Statement Blocks):
  • 语句块用花括号 {...} 包围,用于分组多条语句。
  • 通常缩进 4 个空格以提高可读性,虽然不是语法要求,但有助于理解代码层次。
  • 示例: if (x > 0) { console.log("x 是正数"); }
  • 嵌套(Nesting):
  • JavaScript 没有嵌套深度的限制,但过深的嵌套会增加代码复杂性。建议将复杂逻辑提取为函数以提高可读性和维护性。
  • 注释(Comments):
  • 单行注释:// 开头,直到行尾。
    • 示例:// 这是一行注释
  • 多行注释:/* ... */ 包围,可以跨多行。
    • 示例:
    /* 这是一个 多行注释 */
  • 大小写敏感(Case Sensitivity):
  • JavaScript 是大小写敏感的,变量名、函数名等区分大小写。
  • 示例:var a = 1;var A = 1; 是不同的变量。

2. 数据类型

JavaScript 有 7 种原始数据类型和一种非原始类型,动态类型是其核心特性。

  • 原始类型(Primitive Types):
  • Number:基于 IEEE 754 标准,64 位双精度浮点数。安全整数范围为 -(2^53 – 1) 到 2^53 – 1。
    • 示例:console.log(0.1 + 0.2); // 0.30000000000000004
  • BigInt:表示任意长度的整数,适合处理超大数字。
    • 示例:console.log(-3n / 2n); // -1n
  • String:表示 Unicode (UTF-16) 字符串,可用单引号或双引号。
    • 示例:console.log("Hello"[1] === "e"); // true
  • Boolean:表示真 (true) 或假 (false)。
    • 假值(Falsy):false, 0, "", NaN, null, undefined
    • 真值(Truthy):其他所有值。
    • 示例:Boolean(""); // false
  • Symbol:创建唯一标识符,用于对象属性。
    • 示例:const sym = Symbol();
  • Undefined:表示未定义的值。
  • Null:表示空值。
  • 非原始类型(Non-Primitive Types):
  • Object:包括数组、函数等。
  • Function:函数是可调用的对象,支持函数式编程。

3. 变量

变量是对值的具名引用,JavaScript 支持动态类型和多种声明方式。

  • 声明方式:
  • let:块作用域(block-scoped),可重新赋值。
    • 示例:let a = 1; a = 2;
  • const:块作用域,不可重新赋值,但可以修改对象内部属性。
    • 示例:const obj = {}; obj.a = 1;
  • var:函数作用域(function-scoped),不推荐使用,因其存在变量提升和全局污染问题。
    • 示例:var b = 1;
  • 动态类型:
  • JavaScript 是动态类型语言,变量可以随时改变类型。
    • 示例:let x = 1; x = "字符串";
  • 临时死区(Temporary Dead Zone):
  • letconst 在声明前不可访问,存在临时死区。
    • 示例:console.log(x); let x = 1; // 报错

4. 运算符

运算符用于执行各种操作,包括算术、比较和逻辑运算。

  • 算术运算符+, -, *, /, %, ** (幂运算)
  • 赋值运算符=, +=, -=, 等
  • 增减运算符++, -- (前缀或后缀)
  • 字符串连接+ 或模板字符串
  • 示例:"你好" + "世界"; // "你好世界"
  • 比较运算符<, >, <=, >=
  • 相等运算符:
  • ==:类型转换后比较(不推荐,因可能导致意外结果)。
  • ===:严格比较(推荐),不进行类型转换。
    • 示例:123 === "123"; // false
  • 逻辑运算符&&, ||, !
  • 支持短路求值。
    • 示例:const name = o && o.getName();

5. 控制结构

控制结构用于控制程序流程,包括条件语句和循环。

  • 条件语句:
  • if...else:支持嵌套,无 elif(用 else if 替代)。
    • 示例:
      javascript if (name === "puppies") { name += " woof"; } else if (name === "kittens") { name += " meow"; }
  • switch:使用 === 比较,需手动添加 break 以避免穿透。
    • 示例:
    switch (day) { case "Monday": console.log("星期一"); break; default: console.log("其他"); }
  • 循环:
  • while:条件循环。
  • do...while:至少执行一次的循环。
  • for:传统计数循环。
  • for...of:遍历可迭代对象(如数组)。
    • 示例:for (const item of [1, 2, 3]) { console.log(item); }
  • for...in:遍历对象的可枚举属性。

6. 语法规则

JavaScript 的语法规则包括标识符、分号使用和严格模式。

  • 标识符(Identifiers):
  • 可以使用 Unicode 字符,但不能是保留关键字(如 if, let, function)。
  • 示例:let firstName = "John";
  • 分号(Semicolons):
  • 可选,但推荐使用以避免歧义,尤其在多行语句时。
  • 严格模式(Strict Mode):
  • 使用 "use strict"; 启用,禁用一些不安全的特性,如隐式全局变量。
  • 示例:
    javascript "use strict"; function foo() { // 严格模式下的代码 }

7. 最新更新(ECMAScript 2024)

JavaScript 每年发布新版本,ECMAScript 2024 (ES15) 引入了以下新语法特性:

  • Object.groupBy:使用回调函数分组可迭代对象。
  • 示例:Object.groupBy([1, 2, 3], x => x % 2);
  • Map.groupBy:类似 Object.groupBy,但返回 Map。
  • Promise.withResolvers:直接获取 resolve 和 reject 函数。
  • 示例:const { promise, resolve, reject } = Promise.withResolvers();
  • Set.prototype 的集合操作:如并集、交集等。
  • RegExp 的 /v 标志:改进的 Unicode 处理,兼容性更好。

这些新特性需要注意浏览器支持情况,建议参考 MDN Web DocsV8 博客

总结与推荐

JavaScript 的语法简单但功能强大,适合初学者和高级开发者。核心包括动态类型、块作用域变量和丰富的控制结构。建议开发者参考以下资源深入学习:

通过实践和学习,您可以更全面地掌握 JavaScript 的语法和最佳实践。


关键引用


发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注