大家好,我是江城开朗的豌豆,一名拥有6年以上前端开发经验的工程师。我精通HTML、CSS、JavaScript
等基础前端技术,并深入掌握Vue、React、Uniapp、Flutter
等主流框架,能够高效解决各类前端开发问题。在我的技术栈中,除了常见的前端开发技术,我还擅长3D开发,熟练使用Three.js
进行3D图形绘制,并在虚拟现实与数字孪生技术上积累了丰富的经验,特别是在虚幻引擎开发方面,有着深入的理解和实践。

我一直认为技术的不断探索和实践是进步的源泉,近年来,我深入研究大数据算法的应用与发展,尤其在数据可视化和交互体验方面,取得了显著的成果。我也注重与团队的合作,能够有效地推动项目的进展和优化开发流程。现在,我担任全栈工程师,拥有CSDN博客专家认证及阿里云专家博主称号,希望通过分享我的技术心得与经验,帮助更多人提升自己的技术水平,成为更优秀的开发者。
技术qq交流群:906392632
大家好,我是小杨,一个被JS类型转换折磨了6年的前端工程师。今天我要带大家揭开JavaScript类型转换的神秘面纱,保证让你看完后直呼:"原来我之前写的都是bug!"
一、类型转换的"明枪"与"暗箭"
在JS里,类型转换分两种:
- 明枪:你自己主动转换(显式转换)
- 暗箭:JS偷偷帮你转换(隐式转换)
先看个简单的例子:
javascript
复制
下载
javascript
console.log(Number('42')); // 42 - 这是明枪
console.log('42' - 0); // 42 - 这是暗箭
二、显式转换:我命由我不由天
1. 转数字的三种姿势
javascript
复制
下载
javascript
let age = '18';
console.log(Number(age)); // 18
console.log(parseInt(age)); // 18
console.log(+age); // 18 - 最骚的写法
小杨踩坑记 :
有一次我用parseInt
解析用户输入的"18岁",结果:
javascript
复制
下载
javascript
console.log(parseInt('18岁')); // 18
console.log(Number('18岁')); // NaN
发现了吗?parseInt
会尝试解析,而Number
要求更严格!
2. 转字符串的玄机
javascript
复制
下载
javascript
let score = 100;
console.log(String(score)); // "100"
console.log(score.toString()); // "100"
console.log(score + ''); // "100" - 最常用的骚操作
特别注意:
javascript
复制
下载
vbscript
let me = null;
console.log(String(me)); // "null"
console.log(me.toString()); // 报错!Uncaught TypeError
三、隐式转换:JS的"善意"谎言
这才是真正让人抓狂的地方!
1. + 运算符的精分现场
javascript
复制
下载
arduino
console.log(1 + '1'); // "11" - 字符串拼接
console.log(1 + true); // 2 - 布尔转数字
console.log([] + {}); // "[object Object]" - 对象转字符串
2. == 的魔幻现实主义
javascript
复制
下载
ini
console.log([] == ![]); // true - 怀疑人生系列
console.log(null == undefined); // true
console.log(0 == '0'); // true
小杨忠告:除非你想体验debug的快乐,否则永远用===
四、对象转换的"潜规则"
对象转换时会先调用valueOf(),再调用toString():
javascript
复制
下载
javascript
let obj = {
valueOf: () => 42,
toString: () => '我是对象'
};
console.log(obj + 1); // 43 - 用了valueOf
console.log(`我是${obj}`); // "我是我是对象" - 用了toString
五、实战避坑指南
1. 表单输入的坑
javascript
复制
下载
javascript
// 用户输入"100元"
let input = '100元';
// 错误做法:
let price = parseInt(input); // 100 - 漏了单位检查
// 正确做法:
if (/^\d+$/.test(input)) {
price = parseInt(input);
} else {
alert('请输入纯数字!');
}
2. 判断空数组的坑
javascript
复制
下载
ini
let arr = [];
// 错误做法:
if (arr == false) { // 会执行!
console.log('数组是空的');
}
// 正确做法:
if (Array.isArray(arr) && arr.length === 0) {
console.log('这次真的空了');
}
六、总结与彩蛋
-
显式转换更可控,隐式转换更"智能"(坑更多)
-
记住三个黄金法则:
- 表单输入先校验再转换
- 判断类型用===
- 不确定时console.log(typeof xxx)看一眼
彩蛋:
javascript
复制
下载
ini
console.log([] + []); // ""
console.log({} + []); // 0 - 在有些浏览器是"[object Object]"
最后留个思考题:
javascript
复制
下载
arduino
console.log('5' - '2'); // 3
console.log('5' + '2'); // "52"
为什么减法是数字,加法是字符串?欢迎评论区讨论!