Babel,Dart,TypeScript和其他JavaScript编译器有什么意义?

时间:2018-09-06 13:02:52

标签: javascript

从我开始学习JavaScript到现在已经整整两年了。这是我的第一门编程语言。现在,我对其他语言一无所知,因为我在C ++方面的知识非常简单,除了这两种语言之外,我没有写过其他任何东西。但是JavaScript兔子漏洞肯定会深入。首先让我感到困惑的是巴别塔。

当浏览器(更具体地说是Chrome)遇到较新的JavaScript语法(例如类)时,究竟发生了什么?就像Babel一样,它只是将其转换为带有原型的Function构造函数,还是本机读取此内容?人们是否仅使用Babel使其应用程序在Internet Explorer上运行?最近,我只写过ES代码,它在Chrome和Firefox中都很棒,因此,除了最小化我的代码之外,我没有其他理由使用Babel。

所以最近我遇到了Dart,我真的很喜欢这种语法。但是,当我发现Dart也正在编译您编写的JavaScript代码时,困惑就加剧了。当然,用Dart编写的代码要少得多,但是在YouTube上Dart的演示中,一个人表明,就像10行Dart代码可以编译为10,000行以上的JavaScript代码一样……这比香草JavaScript的“速度”更快吗?不仅仅是写得更快?人们真的为了避免编写JavaScript而竭尽全力吗?我确实很喜欢Dart,但是我叫它退出了,因为社区不存在。 YouTube上只有一个人在做教程,他只是复制/粘贴Dart语言之旅中的所有内容,我认为这并不是非常适合像我这样的人和初学者。示例非常简单,我讨厌阅读文档,因此,至少对我来说,观看现场示例要好得多。所以两周后,我放弃了。

我碰到的另一件事是TypeScript。现在,据我所知,它与JavaScript完全相同,但是具有类型。我明白了,人们已经习惯了。但是JavaScript是我的第一语言,没有类型也没有问题,我真的很习惯。因此,除了做Angular(现在也可以在Dart中做)之外,我也看不到任何意义。

还是我只是缺少一些重要的东西?我喜欢香草的东西,我仍然玩香草的魔兽世界,我真的感觉像是爸爸,抱怨新东西与原始东西相比只是垃圾。那么,为了避免编写出良好的旧JavaScript,走那么远的意义何在?还是所有这些编译器都有不同的原因,而不是……

谢谢!

2 个答案:

答案 0 :(得分:0)

各种浏览器都以自己的“速度”实现了这些较新的语言功能,例如Chrome浏览器可以理解root = {'a': 1, 'b': {'c': 2, 'd': 3}} result = {'a': 1, 'c': 2, 'd': 3} ,但Internet Explorer不能。

Chrome处理这种新语法的方式并不重要,如果您了解使用一些繁琐的C ++的方法,则可以查找v8源代码。

Babel的目的是允许您作为开发人员使用这些功能,现在,但仍然能够提供较老的浏览器可以理解的JS。

飞镖是另外一回事。这是一种全新的语言,具有不同的目标,相当的执行速度与等效的“本地” JS就是其中之一。

TypeScript也不同。从功能上讲,它是Babel +强类型。

为什么要使用它们? 1)因为其中一些新语言功能非常棒(例如,异步/等待可能将一堆Promises变成真正好的可读代码)。

2)因为有些人喜欢用不同的范例编写网络代码。

3)因为强类型语言更适合某些类型的问题。

4)因为任何人都可以编写计算机可以理解的代码,但是很少有人可以编写其他人可以理解的代码。

答案 1 :(得分:0)

简短答案:

Babel -现在,主流浏览器广泛支持ES6-但在此之前,Babel允许您在ES6中编写代码并将其转换为ES5-因此它仍然可以在较旧的浏览器上运行。

但是Babel不仅仅是将ES6移植到ES5。例如-Babel通常用于将JSX编译为有效的javascript代码。但是您可以编写babel插件来执行任何操作-它基本上只是一个文本转换器。

TypeScript -Typescript为您提供诸如界面和静态键入之类的功能。

这对于编写代码非常有帮助。例如,说我有一个方法:

function addPerson (person) {
     console.log(person.firstname, person.age); 
}

,我用addPerson("bob")来调用它,那么我将遇到运行时错误。

打字稿使我可以执行以下操作:

interface Person {
    firstName: string; 
    age: number; 
}


function addPerson(person: Person) { 
 ... 
}

然后,当我尝试使用addPerson("bob")调用该函数时,打字稿会在我甚至尝试运行代码之前在IDE中给我警告。

Dart -我不知道。