JavaScript 和 TypeScript 有什么区别
你有没有过这种经历?写代码写一半,突然发现变量类型乱了,一会儿是数字一会儿是字符串,调试到凌晨两点还找不到bug?如果你刚接触前端开发,大概率听过JavaScript和TypeScript这两个名字,甚至会疑惑:这俩不都是写前端的吗?为啥公司招人时总说“要会JS和TS”?其实它们的关系,就像咱们平时用的“普通笔记本”和“带分类标签的笔记本”——看着功能类似,但细节上差得还挺多。
先搞懂:它们是“啥关系”
很多人会把TS当成JS的“升级版”,其实更准确说,TS是JS的“加强版”。JS是前端的“基础语言”,就像咱们说话的大白话,灵活但没那么规整;而TS是在JS的基础上,加了一套“类型规则”,相当于给大白话套上了“标点和语法规范”,写的时候更严谨,跑起来更稳。举个生活化的例子:JS就像你跟朋友随口说“我买了水果”,朋友不知道是苹果还是香蕉;TS就像你说“我买了3个红苹果”,连数量和样子都讲得清清楚楚,没人会误会。

最核心的区别:“变量类型”管得严不严
这是两者最直观的差异。JS是“动态类型”,意思是变量的类型可以随便变,你可以先把一个变量设为数字100,转头又给它改成字符串“你好”,甚至改成布尔值true,完全不用提前说清楚——好处是灵活,写小功能很快,缺点是容易出bug。比如你写个计算总价的函数,不小心把数量写成了字符串“5”,价格是数字20,JS会自动把“5”当成数字,算出100,但如果哪天手滑写成“abc”,JS就会把它当成NaN(不是数字),最后总价变成NaN,找bug时可能都不知道是类型错了。
而TS是“静态类型”,写的时候必须提前说清变量是什么类型,比如你要写数量,就得标“number”,要写名字就得标“string”,改类型直接报错。还是刚才的总价例子,你要是写个数量变量,提前标了number,转头给它赋“abc”,TS会直接在写代码的时候就弹出错误,说“你这个类型不对”,根本不会让你带到运行时,省了好多调试功夫。当然TS也有灵活的地方,比如你可以写“any”类型,相当于暂时放着不管,适合快速写小代码,但团队合作时一般不建议用,不然就白加类型规则了。
谁更适合“长期写代码”?
如果只是做个简单的个人网页,比如给自家小店做个宣传页,JS完全够用,写得快,不用考虑那么多规则。但如果是做大型项目,比如电商平台、社交APP,团队十几个人一起写,TS的优势就出来了:比如你写的函数需要接收用户ID,TS会提前告诉你“这个参数必须是数字,不能是字符串”,其他人用你的函数时不会传错,而且代码里的每个变量是什么意思,看类型就懂,不用再翻注释,维护起来省好多时间。
另外还有个小细节:JS是浏览器直接能看懂的,写完就能跑;而TS的代码,浏览器不认,必须先转成JS才能用——这个过程叫“编译”,就像你把带标签的笔记本,先改成普通笔记本,再交给别人用,不过这个编译过程现在的工具(比如Vite)自动做,不用你手动操作。
简单总结一下:如果是做小项目、练手,用JS就行;如果是做中大型团队项目,怕出类型bug,选TS准没错。就像出门买东西,买个小零食随便拎个袋子,买大件东西还是用带分类的收纳箱更省心。