在 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 → 0Boolean方法:
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 的优先级。
避免依赖隐式转换,尽量显式转换以提高代码可读性。