类型前置
什么是数据类型?
如果你是一名程序员,那你一定使用过变量、函数参数或者函数返回值,它们都用来表示数据,在编程语言中无处不在;
但是,你是否知道它们的真正含义呢?又是否知道它们在后台如何控制计算机的呢?
在很多如 C/C++/C#、Java 编程语言中,定义变量时除了需要指明变量的名字,还需要告诉计算机它是什么类型,比如简单的整数、浮点数、字符串,还有复杂的类、结构体、数组。
编程语言中的数据最终都要放到内存中,在内存中存取数据要明确三件事情:数据存储地址、数据的长度以及数据的处理方式。
- 数据存储地址决定了数据放在哪里;
- 数据类型,决定了其数据长度,数据长度又决定了当前数据使用了多少个字节的内存;
- 数据类型与决定了数据处理方式 不仅让计算机能够正确转换数据的内容,不至于导致“乱码”,还让计算机知道如何处理基于该数据的各种运算,比如加减乘除。
变量名不仅仅是为数据起了一个好记的名字,还告诉我们数据的存储地址,使用数据时,只要提供变量名即可,变量名会自送转换成数据在内存中的地址。而数据类型则指明了数据的长度和处理方式,它确定了除地址以外的其它所有信息。
静/动态类型语言
静态类型和动态类型应该放在一起提及,它们从「如何得到数据的类型」这一维度来评价类型系统。
核心区分
静态类型语言:在定义的时候就要指定变量的类型,而且类型不会在之后变,然后根据类型为其分配分配长度、存储内存、和提供处理数据方式
动态类型语言:第一次赋值给变量时,根据其值推导出来,后续赋值类型若不同,这个变量的类型也会随之改变
对比好处
1、工具支持上,编辑器ide会根据静态语言定义的类型提供智能提示,但是动态语言基本很难做到
2、阅读友好性上,静态语言在二次开发或者阅读代码的时候比较友好,你可以很清楚的看到参数和返回类型进而推断出业务逻辑,但动态则是编写一时爽,重构火葬场,尤其是设涉及到业务复杂的地方,代码惨不忍睹
3、在发现错误时机上,静态类型语言存在编译阶段,很多错误如 因类型错误而不能做的事情(语法错误)就可以发现。而动态类型语言不存在编译阶段,很多错误都是在运行阶段才发现
4、编写舒适性上,这个动态语言扳回一局,写起来不用考虑类型局限,编码会很流畅 Java程序员还在那里定义接口,定义数据类型。js工程师已经快速干完活,回家老婆孩子热炕头了
强/弱类型定义语言
强/弱类型指的是编程语言如何处理运算过程中的值。当值的类型不符合运算规则时,编程语言究竟是做出一些猜测,临时转换值的类型以帮助人们解决问题,还是停止运行,提醒人们不应该这样做。
核心区分
强类型定义语言:很少合理隐的隐式类型转换
弱类型定义语言:有较多过分的隐式类型转换
对比好处
1、若语言自动转换类型很方便,但是有时候会出现转换不是那么智能 2、强语言写起来很麻烦,不确定的很多地方都会报错。这就保证了代码稳定,先天健壮性强
相比之下,强类型语言这么做运算, 编译阶段就开始报错了,而且编辑器也会直接提示存在问题。
不过 很少合理隐的式类型转换 也不一定都是弱类型定义语言,如java

ts的诞生
js是弱/动态语言。
随着前端项目的日益庞大,以及nodejs让js也开始处理大量业务逻辑,js的这些缺点被无限放大!
于是typescript就孕育而出,它的出现就是解决前端这些问题!