JavaScript的数据类型转换
转换为数字
在 JavaScript 中,Number、parseInt 和 parseFloat 都可以将字符串转换为数字,但它们的行为和用途略有不同。下面是清晰的对比:
🔢 Number(value)
用于将一个值转换为“数字类型”。适合用于需要精确转换的场景。
-
✅ 可以处理整数、浮点数、空字符串、布尔值等。
-
❌ 如果字符串包含非数字字符(比如
"123abc"),会返回NaN。 -
📌 示例:
Number("123") // 123 Number("123.45") // 123.45 Number("123abc") // NaN Number("") // 0 Number(true) // 1
🧮 parseInt(string, radix)
专门用于将字符串转换为“整数”,并可以指定进制(比如二进制、十六进制)。
-
✅ 忽略字符串中的非数字尾部。
-
❌ 遇到非数字头部会返回
NaN。 -
📌 示例:
parseInt("123abc") // 123 parseInt("abc123") // NaN parseInt("10", 2) // 2 // 二进制的 "10" 等于十进制 2 parseInt("0xF", 16) // 15
🌊 parseFloat(string)
用于将字符串转换为“浮点数”,可以识别小数点。
-
✅ 忽略尾部非数字字符。
-
❌ 遇到非数字头部会返回
NaN。 -
📌 示例:
parseFloat("123.45px") // 123.45 parseFloat("abc123.45") // NaN parseFloat("123") // 123
✅ 总结对比
| 方法 | 类型 | 能否处理混合字符 | 支持进制转换 | 返回值类型 |
|---|---|---|---|---|
Number() |
数字类型 | ❌ 严格 | ❌ 不支持 | number / NaN |
parseInt() |
整数 | ✅ 可容忍尾部 | ✅ 支持 | number / NaN |
parseFloat() |
浮点数 | ✅ 可容忍尾部 | ❌ 不支持 | number / NaN |
转换为布尔
在 JavaScript 中,值转换为布尔类型时遵循 “真值”与“假值”判断规则(truthy vs. falsy)。你可以使用 Boolean(value) 或直接在条件语句中测试,例如 if (value)。
✅ 以下是会转换为 true 的值(truthy)
| 类型 | 示例 | 转换结果 |
|---|---|---|
| 字符串 | "hello"、"false" |
true |
| 数字 | 除了 0 和 NaN | true |
| 对象 | {}、[] |
true |
| 函数 | function() {} |
true |
| 特殊值 | Infinity, -Infinity |
true |
Boolean("Vue") // true
Boolean(123) // true
Boolean({}) // true
❌ 以下是会转换为 false 的值(falsy)
| 类型 | 示例 | 转换结果 |
|---|---|---|
| 空字符串 | "" |
false |
| 数字 | 0、NaN |
false |
| 未定义 | undefined |
false |
| 空值 | null |
false |
| 布尔值 | false |
false |
Boolean("") // false
Boolean(0) // false
Boolean(null) // false
Boolean(undefined) // false
🔎 快速测试方法
你也可以使用两次逻辑非运算符 !! 来进行布尔转换:
!!"CSS" // true
!!0 // false
!![] // true
!!null // false
转换为字符串
在 JavaScript 中,有多种方式可以把不同类型的值转换为字符串。不同的转换方式在处理对象或 null、undefined 等值时会略有不同:
🧵 常见转换方法
1. String(value) —— 显式转换
-
会把任何类型转换为字符串。
-
对于
null和undefined,会返回"null"和"undefined"。 -
📌 示例:
String(123) // "123" String(true) // "true" String(null) // "null" String(undefined) // "undefined" String([1, 2]) // "1,2"
2. value.toString() —— 方法调用转换
-
只能用于对象或基本类型,不适用于
null和undefined,否则报错。 -
更适用于自定义对象或格式控制。
-
📌 示例:
(123).toString() // "123" true.toString() // "true" [1, 2, 3].toString() // "1,2,3" // null.toString() // ❌ TypeError // undefined.toString() // ❌ TypeError
3. 模板字符串 ${value} —— 隐式转换
-
自动调用
String(value),适合拼接字符串。 -
📌 示例:
`${123}` // "123" `${null}` // "null" `${[1, 2]}` // "1,2"
🎯 总结对比表
| 方法 | 可转换类型 | 对 null/undefined 安全 |
推荐场景 |
|---|---|---|---|
String(value) |
所有类型 | ✅ 安全 | 通用转换 |
value.toString() |
非 null/undefined |
❌ 会报错 | 对象自定义格式 |
${value} |
所有类型 | ✅ 安全 | 字符串拼接与输出 |
隐式转换
🧵 1. 转为字符串(String)
let a = 100;
let b = a + "";
a + ""是最常见的隐式转换方式之一。- 类似的方式还有
String(a),或用模板字符串${a}。 - 应用场景:拼接输出、表单处理、URL 参数等。
🔢 2. 转为数字(Number)
let d = "100";
let e = d - 0;
- 减号
-操作符触发隐式数值转换。 - 其他方式还有
Number(d)或parseInt(d, 10)。 - 典型场景:处理来自表单或 API 的字符串数字。
✅ 3. 转为布尔值(Boolean)
let g = "100";
let h = !g;
- 使用
!先将值转为布尔再取反。 - 两次取反
!!g可用于判断真值(truthy)。 - 常用于条件语句中,例如:
if (!!g) {...}
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 程序员Hanserwei
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果