在 JavaScript 中,数据类型转换分为 显式转换(手动转换)和 隐式转换(自动转换)。以下是常见转换方法及规则:
String
方法:
String(value); // 通用方式 value.toString(); // 不能转 null/undefined `${value}`; // 模板字符串
规则:
null
→ "null"
,undefined
→ "undefined"
对象默认返回 "[object Object]"
,数组转为逗号拼接的字符串:
javascriptString({}); // "[object Object]" String([1, 2, 3]); // "1,2,3"
Number
方法:
Number(value); // 严格转换 parseInt(value, 基数); // 解析整数(忽略非数字后缀) parseFloat(value); // 解析浮点数 +value; // 一元运算符(等同 Number())
规则:
Number("123"); // 123 Number("123abc"); // NaN(完全无效则返回 NaN) Number(""); // 0(空字符串转 0) Number(null); // 0 Number(undefined); // NaN Number(true); // 1, false → 0
Boolean
方法:
Boolean(value); // 显式转换 !!value; // 双非运算(等效 Boolean)
假值(转为 false
的情况):
Boolean([]); // true Boolean({}); // true Boolean("0"); // true(非空字符串)
false
, 0
, ""
, null
, undefined
, NaN
其余均为 true
(包括空对象、空数组):
Boolean([]); // true
Boolean({}); // true
Boolean("0"); // true(非空字符串)
JavaScript 在特定操作中会自动转换类型,常见场景:
+
运算符:
若一方为字符串,则转为字符串拼接:
"3" + 4; // "34" 3 + "4"; // "34" "5" + null; // "5null"
其他运算符(-
、*
、/
)优先转为数值:
"5" - 2; // 3 "10" / "2"; // 5
if
、||
、&&
等会将值隐式转为布尔值:
if (0 || "" || null || undefined || NaN) { // 不会执行(这些值转为 false)}
==
宽松相等比较类型不同时,优先转为数值再比较:
"5" == 5; // true(字符串转数值) null == undefined; // true(特殊规则) "1" == true; // true(true → 1, "1" → 1)
对象转原始值时,优先调用 valueOf()
或 toString()
,规则如下:
toString()
)const obj = { toString() { return "obj"; }, valueOf() { return 1; } }; String(obj); // "obj"(优先调用 toString)
valueOf()
)const obj = { valueOf() { return 100; }, toString() { return "200"; } }; +obj; // 100(优先调用 valueOf)
+
运算)若对象参与 +
运算,可能优先调用 toString()
:
const obj = { toString() { return "10"; }, valueOf() { return 5; } }; obj + 1; // "101"(转字符串拼接)
+"123"; // 123(等同 Number("123")) Math.floor("3.9"); // 3(向下取整) ~~"3.9"; // 3(双按位非,快速取整)
JSON.stringify({ a: 1 }); // '{"a":1}' JSON.parse('{"a":1}'); // { a: 1 }
用 ===
替代 ==
:
"0" == 0; // true(隐式转换) "0" === 0; // false(严格不转换)
检查有效数值:
isNaN("abc"); // true(需注意 isNaN 的隐式转换) Number.isNaN("abc"); // false(更严格)
目标类型 | 方法/场景 | 示例结果 |
---|---|---|
字符串 | String() 、${} | String(123) → "123" |
数值 | Number() 、+ | Number("123") → 123 |
布尔值 | Boolean() 、!! | Boolean("hi") → true |
对象 | JSON.parse() | JSON.parse('{}') → {} |
隐式 | + 运算、逻辑判断 | "3" + 4 → "34" , if(0) → false |
注意事项:
parseInt
需指定基数(如 parseInt("10", 2) → 2
)。
对象转原始值时,注意 valueOf
和 toString
的优先级。
避免依赖隐式转换,尽量显式转换以提高代码可读性。