Javascript 可选类型提示

Javascript optional type hinting

本文关键字:提示 类型 Javascript      更新时间:2023-09-26

当编程语言是静态类型时,编译器可以更精确地分配内存,因此通常性能更高(所有其他条件相同(。

我相信 ES4 引入了可选的类型提示(据我所知,由于 actionscript 的原因,Adobe 在为其规范做出贡献方面发挥了重要作用(。 因此,javascript 是否正式支持类型提示? ES6 是否支持本机变量的可选类型提示?

如果Javascript确实支持类型提示,是否有任何基准测试可以显示它在性能方面的回报? 我还没有看到一个开源项目使用它。

通过听各种网站上的许多Javascript演讲,我的理解是,类型提示不会像人们想象的那样有帮助。

简而言之,如果你愿意的话,大多数Javascript对象往往具有相同的"形状"。 也就是说,它们将具有以相同顺序创建的相同属性。 这个"形状"可以被认为是物体的"类型"。举个例子:

function Point(x, y) {
  this.x = x;
  this.y = y;
}

所有由"Point"制作的对象都将具有相同的"形状",较新的内部Javascript引擎可以做一些花哨的游戏来获得更快的查找。

在Chrome(也许是其他人(中,他们使用高位标志来指示数字的其余部分是整数还是指针。

随着所有这些花哨的事情发生,这就只剩下人类编码人员打字了。 一方面,我真的很喜欢不必担心类型,也不会使用该功能。

不过,你是半正确的。 类型提示是ActionScript 3的一部分,它是ECMAScript的衍生物 - 但提示从未进入标准。 AFAIK,除了一厢情愿之外,还没有讨论过。

此视频更详细地描述了一些事情:http://www.youtube.com/watch?v=FrufJFBSoQY

我迟到了,但由于没有人真正回答你关于标准的问题,我会跳进去。

的,类型提示是作为 ECMAScript 4 的一部分讨论的,看起来它将成为 JavaScript 的未来......直到 ES4 咬了灰尘。ECMAScript 4 被放弃了,从未最终确定。ECMAScript 5(当前标准(没有包含 ECMAScript 4 计划的许多内容(包括类型提示(,实际上只是 ECMAScript 3.1 草案的快速增强版本——在 ES4 过早消亡之后,为了获得一些有用的功能。

正如你提到的,现在他们正在努力开发 ECMAScript 6(它有一些非常棒的功能!(,但不要指望看到类型提示。在某种程度上,Adobe 的家伙已经与 ECMAScript 委员会分道扬镳,而 ES 委员会似乎对恢复它不感兴趣(我认为这是有充分理由的(。

如果这是你想要的东西,你可能想看看 TypeScript。这是一个全新的Microsoft项目,基本上是尝试成为 ES6+ 类型。它是 JavaScript 的超集(除了包含类型之外几乎相同(,它可以编译为可运行的 JavaScript。

JavaScript JIT编译器必须做一些非常花哨的事情来确定表达式和变量的类型,因为类型对于许多优化至关重要。但是JavaScript编译器编写者在过去的五年里一直在做所有这些工作。编译器现在真的很聪明。因此,可选的静态类型不会提高典型程序的速度。

令人惊讶的是,当值从非类型化代码传递到类型化代码时,ActionScript 中的类型批注有时会要求进行类型检查(或隐式转换(,从而使编译的代码变慢

您可能还需要编程语言中的静态类型还有其他原因,但 ECMAScript 标准委员会没有兴趣将它们添加到 JS 中。

ES7(不会很快推出(有一个名为guard的新功能可能是您要问的功能。现在的语法有点类似于ES4和TypeScript。全部使用 : 并将类型追加到变量。但它没有确认语法。

Javascript是基于原型的,因此对象的"类型"是完全动态的,并且能够在其生命周期中发生变化。

看看 Ben Firshman 关于对象类型的 Javascript 性能的发现 - http://jsconf.eu/2010/speaker/lessons_learnt_pushing_browser.html