Typescript VS Javascript 对比
前言
最近一直在面试工作,经常被面试官问:
Typescript 与 Javascript相比,它的优势在哪?
总是回答得不是很全面,今天准备把这个问题整理一下,记录于此。
首先我们先从概念说起:
Javascript
狭隘的Javascript指的是由当 Netscape公司开发的用于Web浏览器和服务器交互的脚本语言。广义的Javascript指的是实现了ECMAScript标准的脚本语言。
特性
- 不依赖任何宿主环境,可以在不同的宿主环境中运行,是一种跨平台的语言。
Javascipt的核心是ECMAScript,ECMAScript 可以为不同种类的宿主环境提供核心的脚本编程能力,核心的脚本语言是与任何特定的宿主环境分开进行规定的。 - JavaScript 是一种脚本语言,无需编译,只要嵌入浏览器中,就能在浏览器中逐行加载解释执行。
- JavaScript 是一种基于对象的语言,可以创建对象同时使用现有对象。但是 Javascript 并不支持其它面向对象语言所具有的继承和重载功能。
- JavaScript是一种弱类型语言。
- JavaScript 语言较为安全,不会访问本地硬盘数据。
- JavaScript能够与其他技术(如 XML,REST API 等)一起使用。
- Javascript含ECMAScript、DOM、BOM;
优势
JavaScript的一些优势:
- 活跃的用户群
JavaScript 的开发者社区仍然是巨大而活跃的,在社区中可以很方便地找到大量成熟的开发项目和可用资源。 - 学习曲线
由于 JavaScript 语言发展的较早,也较为成熟,所以仍有一大批开发人员坚持使用他们熟悉的脚本语言 JavaScript,而不是学习 TypeScript。 - 无需编译,可直接运行
TypeScript 代码需要被编译(输出 JavaScript 代码),这是 TypeScript 代码执行时的一个额外的步骤。 - 不需要注释
为了充分利用 TypeScript 特性,开发人员需要不断声明变量类型,这可能会使项目效率降低。 - 灵活性
有些开发人员更喜欢 JavaScript 的灵活性。
Typescript
TypeScript 是 Microsoft 开发和维护的一种静态类的开源编程语言。它是 JavaScript 的超集,包含了 JavaScript 的所有元素,并扩展了 JavaScript 的语法。
特性
- TypeScript 是 Microsoft 推出的开源语言,可以编译成纯Javascript。
- TypeScript 是一种静态类型语言,新增类型静态检查、接口、类型推断等。
- TypeScript 可用于开发大型的应用,支持ES6及更新的Javascript的特性。
优势
下面列举 TypeScript 相比于 JavaScript 的显著优势:
1.静态类型
静态类型化是一种功能,可以在开发人员编写脚本时检测错误。查找并修复错误是当今开发团队的迫切需求。有了这项功能,就会允许开发人员编写更健壮的代码并对其进行维护,以便使得代码质量更好、更清晰。
2. 大型的开发项目
有时为了改进开发项目,需要对代码库进行小的增量更改。这些小小的变化可能会产生严重的、意想不到的后果,因此有必要撤销这些变化。使用TypeScript工具来进行重构更变的容易、快捷。
3. 更好的协作
当发开大型项目时,会有许多开发人员,此时乱码和错误的机也会增加。类型安全是一种在编码期间检测错误的功能,而不是在编译项目时检测错误。这为开发团队创建了一个更高效的编码和调试过程。
4. 更强的生产力
干净的 ECMAScript 6 代码,自动完成和动态输入等因素有助于提高开发人员的工作效率。这些功能也有助于编译器创建优化的代码。
主要差异
- TypeScript 可以使用 JavaScript 中的所有代码和编码概念。
- TypeScript 是为了使 JavaScript 的开发变得更加容易而创建的。例如,TypeScript 使用类型和接口等概念来描述正在使用的数据,这使开发人员能够快速检测错误并调试应用程序。
- TypeScript 从核心语言方面和类概念的模塑方面对 JavaScript 对象模型进行扩展。
- JavaScript 代码可以在无需任何修改的情况下与 TypeScript 一同工作,同时可以使用编译器将 TypeScript 代码转换为 JavaScript。
- TypeScript 通过类型注解提供编译时的静态类型检查。
- TypeScript 中的数据要求带有明确的类型,JavaScript不要求。
- TypeScript 为函数提供了缺省参数值。
- TypeScript 引入了 JavaScript 中没有的接口概念。
- TypeScript 中引入了类型声明的模块。