今天刚想通了。我在 IE 调试模式下花了一些时间,像往常一样浏览网页,哦,天哪,我看到很多错误 :) 大多数这些错误是因为某些值的类型与预期不同(至少就我解释错误而言消息)。
JavaScript 和类似的脚本语言不是强类型的原因是什么?仅仅是为了让语言“更容易”理解和更易于访问,还是缺乏“编译时”才是真正的问题?
今天刚想通了。我在 IE 调试模式下花了一些时间,像往常一样浏览网页,哦,天哪,我看到很多错误 :) 大多数这些错误是因为某些值的类型与预期不同(至少就我解释错误而言消息)。
JavaScript 和类似的脚本语言不是强类型的原因是什么?仅仅是为了让语言“更容易”理解和更易于访问,还是缺乏“编译时”才是真正的问题?
它绝对应该有强大的类型可用。Actionscript 3 是强类型的,但如果您需要动态对象,它仍然具有原型继承和通配符类型。
拥有该功能没有任何缺点,我不得不说,对于一个中等到大尺寸的项目,强类型可以防止大量问题。要充分利用它,您需要 IDE 支持,以便它可以报告错误并提供自动完成选项,但如果 Javascript 具有真正的类和强类型,它将处于一个全新的世界。
javascript 和类似的脚本语言会从强类型中受益吗?
是的,他们会的,JavaScript 2.0引入了一个类型系统:
类型系统 JavaScript 2.0 支持类型的概念,可以将其视为所有可能值的子集。有一些内置类型,例如 Object、Number 和 String;每个用户定义的类(第 6 节)也是一种类型。
另见:http ://timkadlec.com/2008/04/an-objective-look-at-javascript-2-0-strong-typing/
一般来说,对强类型的支持为编译和优化过程提供了许多有趣的机会。
它从不输入中获得了灵活性。我个人喜欢弱类型语言。
所以答案是有利有弊。
对于想要在浏览器中使用强类型语言的人,可以使用 GWT 和 Script#。
在很大程度上,我喜欢大多数脚本语言的弱类型方面。除了性能之外,我想要强类型的唯一原因是工具重构强类型语言比弱类型语言更容易。
我自己的意见:您可以在执行脚本之前对其进行解析。这将捕获大多数类型错误,并意味着用户不必看到部分执行然后终止的脚本结果。更好的是,如果它有解析器,调试它会容易得多:)
早在很久以前,我就在 ActionScript 2 中为 eLearning 构建了一个快速原型框架。我最大的抱怨是 AS2 不是强类型的,它在调试时让我很头疼。我认为强类型的东西使代码更容易阅读。我认为弱类型语言提供了更大的灵活性。
当我不得不回过头来弄清楚我 6 个月前写的代码到底发生了什么时,我更倾向于可读性。
微软在使用 typescript 临时解决强类型问题方面已经走了很长一段路。看一看: