JavaScript变量无固定类型,类型属于值且运行时动态确定;typeof检测值的类型;无编译期校验,错误在运行时暴露;隐式转换易致坑,建议显式转换;对象属性和函数参数均具高度动态性。

JavaScript 的动态类型,核心就一句话:变量没有固定类型,类型只属于值,且随时能变。
变量不绑定类型,值决定一切
声明一个变量时,你完全不用告诉 JavaScript 它该存什么类型。它只看当前赋给它的值是什么,就认定它是什么类型:
- let x = 100 → 此刻 x 是 number
- x = "abc" → 现在 x 是 string
- x = [1, 2, 3] → 接着 x 就是 object(数组也是对象)
typeof x 检查的永远是“此刻 x 所指向的值”的类型,不是 x 这个容器的类型。
运行时才确定类型,错误也在此刻暴露
JS 代码直接交给引擎执行,不经过编译期类型校验。这意味着:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
立即学习“Java免费学习笔记(深入)”;
- 调用 x.toUpperCase() 前如果 x 是数字或 null,会立刻抛出 TypeError
- "5" + 2 得到 "52","5" - 2 却得 3 —— 运算符触发隐式转换,规则由引擎当场判断
- 没用 TypeScript 的项目里,这类问题只能靠测试或运行时捕获
隐式转换带来便利,也埋下隐患
JS 会在运算或比较中自动尝试转类型,逻辑看似方便,实则容易踩坑:
- == 会先尝试类型转换再比较:0 == false 为 true,但 0 === false 为 false
- Boolean([]) 是 true,Boolean({}) 也是 true,但 Boolean(null) 是 false
- 做数值计算前,建议用 Number(x) 或 parseInt(x) 显式转换,避免依赖 +"" 或 -"" 等隐式行为
动态性不止于变量,还延伸到对象和函数
类型灵活性贯穿整个语言行为层面:
- 对象可以随时添加、删除属性:obj.newProp = "yes"
- 函数参数不设限:function log(a) { console.log(a) } 可传字符串、数字、对象甚至 undefined
- 同一个函数调用,传入不同类型可能产生完全不同行为,比如过去常用的 Array.prototype.slice.call() 类数组转换

















