什么';Babel、Dart、TypeScript和其他JavaScript编译器的意义何在?

什么';Babel、Dart、TypeScript和其他JavaScript编译器的意义何在?,javascript,Javascript,从我开始学习JavaScript到现在已经整整两年了。这是我的第一种编程语言。现在,我对其他语言了解不多,因为我在C++中的知识是非常简单的,除了这两个以外,我还没有写过其他东西。但是JavaScript兔子洞确实很深。首先,让我困惑的是巴贝尔 当浏览器(更具体地说,是Chrome)遇到更新的JavaScript语法时,比如类,到底发生了什么?它是像Babel那样将其转换成带有原型的函数构造函数,还是将其读入本机?人们使用Babel仅仅是为了让他们的应用程序在Internet Explorer上

从我开始学习JavaScript到现在已经整整两年了。这是我的第一种编程语言。现在,我对其他语言了解不多,因为我在C++中的知识是非常简单的,除了这两个以外,我还没有写过其他东西。但是JavaScript兔子洞确实很深。首先,让我困惑的是巴贝尔

当浏览器(更具体地说,是Chrome)遇到更新的JavaScript语法时,比如类,到底发生了什么?它是像Babel那样将其转换成带有原型的函数构造函数,还是将其读入本机?人们使用Babel仅仅是为了让他们的应用程序在Internet Explorer上运行吗?最近我只写了ES代码,它在Chrome和Firefox中运行得非常好,所以除了最小化我的代码之外,我认为没有理由使用Babel

所以最近我遇到了Dart,这是我非常喜欢的语法。但是,当我发现Dart也在编译您编写到JavaScript的代码时,困惑起来。当然,使用Dart编写的代码要少得多,但在YouTube上的一次Dart演示中,一个家伙展示了大约10行Dart代码编译成10000多行JavaScript代码。。。除了编写速度更快之外,这怎么可能比普通JavaScript“更快”呢?人们真的为了避免编写JavaScript而这么费劲吗?我确实喜欢Dart,但我放弃了它,因为社区根本不存在。YouTube上只有一个人做教程,他只是复制/粘贴Dart语言之旅的所有内容,在我看来,这不太适合像我这样的初学者。示例非常简单,我讨厌阅读文档,至少对我来说,观看实时示例要好得多。两周后,我放弃了

我遇到的另一件事是打字稿。现在,据我所知,它与JavaScript完全相同,只是类型不同。我明白了,人们已经习惯了。但是JavaScript作为我的第一语言,我对它没有任何问题,没有类型,我真的习惯了。所以除了做角度(现在你们也可以在Dart中做),我也看不出有什么意义

还是我只是错过了一些关键的东西?我喜欢香草的东西,我仍然玩《香草魔兽世界》,我真的觉得自己像个爸爸,抱怨新东西和原来的东西相比只是垃圾。那么,为了避免编写好的旧JavaScript,走这么远有什么意义呢?或者所有这些编译器都有不同的原因吗


谢谢

各种浏览器以自己的“速度”实现这些新的语言功能,因此Chrome就可以理解
类,但Internet Explorer不能

Chrome如何处理这个新语法并不是相关的,如果你知道一些重量级C++的方法,你可以查找V8源代码。 Babel的目的是让您作为开发人员现在就可以使用这些功能,但仍然能够为旧浏览器理解的JS服务

飞镖是另一回事。这是一种全新的语言,具有不同的目标,执行速度相当于其中一种“原生”JS

打字脚本也不同。从功能上讲,它是巴别塔+强类型

为什么要使用它们? 1) 因为这些新的语言特性中有一些非常好(例如,async/await可以将杂乱无章的承诺转化为非常好的可读代码)

2) 因为有些人喜欢用不同的模式为网络编写代码

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


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

各种浏览器都以自己的“速度”实现了这些新的语言功能,所以Chrome就可以理解
类,但Internet Explorer不能

Chrome如何处理这个新语法并不是相关的,如果你知道一些重量级C++的方法,你可以查找V8源代码。 Babel的目的是让您作为开发人员现在就可以使用这些功能,但仍然能够为旧浏览器理解的JS服务

飞镖是另一回事。这是一种全新的语言,具有不同的目标,执行速度相当于其中一种“原生”JS

打字脚本也不同。从功能上讲,它是巴别塔+强类型

为什么要使用它们? 1) 因为这些新的语言特性中有一些非常好(例如,async/await可以将杂乱无章的承诺转化为非常好的可读代码)

2) 因为有些人喜欢用不同的模式为网络编写代码

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

4)因为任何人都能编写计算机能理解的代码,但很少有人能编写其他人能理解的代码。简短回答:

Babel-现在主流浏览器广泛支持ES6,但在此之前,Babel允许您使用ES6编写代码并将其传输到ES5,因此它仍然可以在较旧的浏览器上使用

但Babel不仅仅是用于将ES6传输到ES5。例如,Babel通常用于编译为有效的javascript代码。但是你可以编写babel插件来做任何事情——它基本上只是一个文本转换器

TypeScript-TypeScript为您提供了界面和静态键入等功能

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

function addPerson (person) {
     console.log(person.firstname, person.age); 
}
我用addPerson(“bob”)
调用它,然后我会得到一个运行时错误

而typescript允许我执行以下操作:

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


function addPerson(person: Person) { 
 ... 
}
然后,当我尝试使用
addPerson(“bob”)
typescript调用函数时,在我尝试运行之前,会在IDE中给我一个警告