Javascript 可选类型提示
Javascript optional type hinting
当编程语言是静态类型时,编译器可以更精确地分配内存,因此通常性能更高(所有其他条件相同(。
我相信 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
- 为什么会出现错误;未捕获的类型错误:undefined不是函数;
- 如何在DOM元素上按类型构建此函数
- 同样,同样的错误'ahorcado.js:26未捕获类型错误:无法读取属性'beginPath'
- YUI3 IO实用程序是否可以根据给定的内容类型标头值自动序列化数据
- Webpack/Rect:遵循egghead.io教程,但出现错误:您可能需要一个合适的加载程序来处理此文件类型
- 如何从querySelectorAll中获取按钮类型
- 如何在输入字段中的按钮的帮助下打开日历,该字段的类型为“=”;日期”;
- 提示使用服务器端事件处理程序激活JavaScript
- 如何将具有文本类型值的var放入jQuery函数中
- javascript解释器如何理解变量的数据类型
- 可变大小的JavaScript字符串如何成为基元类型
- Javascript 可选类型提示
- 在所有系列类型之间共享工具提示
- 如何在JSDOC中标记任何类类型以获取类型提示
- DOJO 工具提示给出“未捕获的类型错误:对象不是函数”
- Emscripten:将提示替换为控制台(某种类型)
- WebStorm Node.Js Sequelize Model类型提示
- 谷歌搜索类型工具提示
- javascript提示返回类型始终是对象
- 数据类型检查提示复选框javascript