intro

强类型语言和弱类型语言的区别

强类型语言

不允许改变变量的数据类型,除非进行强制类型转换。例如 Java

弱类型语言

变量可以被赋予不同的数据类型。例如 JavaScript

静态类型语言和动态类型语言的区别

静态类型语言

在编译阶段确定所有变量的类型

从内存的角度来看: 1. 编译阶段确定属性偏移量 2. 用偏移量访问代替属性名访问 3. 偏移量信息共享

动态类型语言

在执行阶段确定所有变量的类型

从内存的角度来看: 1. 在程序运行时,动态计算属性偏移量 2. 需要额外的空间存储属性名 3. 所有对象的偏移量信息各存一份

一些语言的分类

分类

静态类型

动态类型

强类型

Java、C#

Python

弱类型

C(稍弱)、C++(稍弱)

JavaScript、PHP

类型检查

静态类型语言在编译时执行类型检查,而动态类型的语言在运行时执行类型检查。类型检查确保并强制你声明的变量的类型(常量,布尔值,数字,变量,数组,对象)与您指定的值相匹配。

当类型错误发生时,静态类型检查和动态类型检查之间的差异最为重要。在静态类型语言中,错误发生在编译步骤中,即在编译时会出现类型错误。在动态类型语言中,只有执行程序后才会出现错误。错误发生在运行时。

静态类型优势

  1. 可以尽早发现BUG和错误 静态类型检查允许我们在程序没有运行之前就可以确定我们所设定的确定性是否是对的。一旦有违反这些既定规则的行为,它能在运行之前就发现,而不是在运行时。

  2. 起到在线文档的功能

  3. 减少了复杂的错误处理

  4. 使你在重构时更有信心 更新了方法,并且相应地更新了类型定义,那么类型检查器将会帮我去捕获我遗漏的错误。

  5. 将数据和行为分离

  6. 帮助我们消除了一整类bug

  7. 减少单元测试的数量

使用场景

  1. 这段程序对你的业务非常关键

  2. 随着需求的变化,这段程序很可能会被重构

  3. 这段程序很复杂并且有许多活动组件

  4. 这段程序有一个大团队的开发者维护,他们需要能够快速且准确地理解代码

TypeScript

TypeScript 是 JavaScript 的超集,为 JavaScript 的生态增加了类型机制,并最终将代码编译为纯粹的 JavaScript 代码。即它是拥有类型系统的JavaScript的超集。

TypeScript 同样支持最新的 ECMAScript 标准,并能将代码根据需求转换为 ES 3 / 5 / 6,这也就意味着,开发者随时可以使用最新的 ECMAScript 特性,比如 module / class / spread operator 等,而无需考虑兼容性的问题。ECMAScript 所支持的类型机制非常丰富,包括:interface、enum、hybird type 等等。

目前主流的 IDE 都为 TypeScript 的开发提供了良好的支持,比如 Visual Studio / VS Code、Atom、Sublime 和 WebStorm。TypeScript 与 IDE 的融合,便于开发者实时获取类型信息。

推荐资料

Last updated