JavaScript是动态类型语言,变量本身无固定类型,类型属于值,运行时可随时赋值为字符串、数字、布尔值或对象等不同类型的值,类型检查仅在执行时发生。

JavaScript 是动态类型语言,意思是变量本身没有固定类型,类型属于值,而不是变量名。你声明一个变量时不用写 let x: number 这样的类型标注,运行中它可以随时存不同类型的值。
变量不绑定类型,值决定类型
同一个变量在不同时刻可以持有字符串、数字、对象甚至函数,每次赋值后,它的“表现”就由当前值的类型决定:
-
let data = 42;→ 此时data表现为 number -
data = "hello";→ 立刻变成 string -
data = true;→ 又变成 boolean -
data = { id: 1 };→ 变成 object
类型检查发生在运行时
JavaScript 不会在代码写完或编译阶段报类型错误,只有真正执行到那行时,引擎才根据当前值的类型去决定怎么运算或是否出错:
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
-
console.log(5 + "2");→ 输出"52"(自动转字符串) -
console.log(null.length);→ 运行时报错TypeError(null没有length) - TypeScript 或 Java 在写完就提示错误,而 JS 必须等跑起来才暴露问题
和弱类型行为常被一起提到
动态类型 ≠ 弱类型,但 JavaScript 同时具备两者。弱类型指它在运算中会隐式转换类型,这进一步放大了“类型不固定”的感觉:
立即学习“Java免费学习笔记(深入)”;
-
"10" - 5→ 结果是5(字符串被转成数字) -
![]→ 结果是false(空数组转布尔为true,再取反) - 这种自动转换不是 bug,而是语言设计的一部分,但容易引发意外行为
底层其实有明确的类型集合
ECMAScript 规范定义了 7 种原始类型(string、number、boolean、null、undefined、symbol、bigint)和 1 种引用类型(object,含 array、function、date 等)。所谓“动态”,是指变量可依次持有其中任意一种,不是说类型不存在或不可知。

















