JavaScript类型分为原始类型和对象类型,typeof可检测多数原始类型但null例外,Object.prototype.toString.call最准确;显式转换通过String、Number等函数实现,隐式转换发生在运算或比较时,如+操作符触发字符串拼接或数字转换,==引发类型 coercion,建议使用===避免意外。
JavaScript 的类型系统是动态且灵活的,理解其类型机制和转换规则对编写可靠代码至关重要。JS 中的类型分为原始类型和对象类型两大类,而类型转换则在运算、比较等操作中频繁发生。下面从类型分类、类型检测以及隐式与显式转换几个方面详细说明。
JavaScript 有七种原始类型和一种引用类型(对象):
42、3.14
"hello"
true 或 false
object 类型注意:null 虽然属于原始类型,但使用 typeof null 返回 "object",这是历史遗留的 bug。
判断变量类型常用以下几种方式:
typeof "abc" → "string"
typeof [] → "object"(不够精确)typeof null → "object"(错误)[] instanceof Array → true
{} instanceof Object → true
Object.prototype.toString.call([]) → "[object Array]"
Object.prototype.toString.call(null) → "[object Null]"
开发者主动调用转换函数进行类型转换,称为显式转换。
String(123)、String(true)、String(null)
.toString() 方法(null 和 undefined 不能调用)Number("123") → 123,Number("abc") → NaN
parseInt("12px") 解析整数,忽略后缀parseFloat("3.14") 解析浮点数Boolean(0) → false
!!"hello" → true
在某些操作中,JavaScript 自动进行类型转换,常出现在以下场景:
"age: " + 25 → "age: 25",数字转字符串+ 就执行拼接
换:
if ("hello") { ... }:非空字符串转为 truefalse、0、""、null、undefined、NaN
== 允许类型转换,=== 严格比较类型和值0 == "" → true(两者都转为 false)null == undefined → true(特殊规定)"2" == 2 → true(字符串转数字)-"42" → -42(一元负号触发转数字)"5" * "2" → 10(自动转为数字相乘)隐式转换虽然方便,但也容易引发意外结果。建议在关键逻辑中使用 === 避免类型转换陷阱。
基本上就这些。掌握 JavaScript 的类型系统和转换机制,能帮助你写出更稳定、可预测的代码。不复杂但容易忽略。