我在JavaScript的官方页面上找到了ECMA Script。这些人已经对脚本语言进行了标准化(我不再喜欢用JavaScript了!)并将其称为ECMA-262(维基百科)。他们的最新作品是5.1版,由Mozilla Corporation开发,JavaScript的最新稳定版本是1.8.5(请参阅此),该版本基于ECMA的5.1版。
链接的维基百科页面提到了方言。 Mozilla的JavaScript 1.8.5与JScript 9(IE)和JavaScript(Chrome的V8 [Wiki])以及许多其他语言一起被列为方言。我是否了解JavaScript 1.8.5是ECMA-262的派生产品,而SpiderMonkey [Wiki]是运行它的引擎? Chrome具有自己的方言,并且运行它的程序是V8引擎?
所有这些基于ECMA-262的方言,我再也无法理解“什么是JavaScript”?是否有真正的跨浏览器脚本语言?各种实现者是否齐心协力就方言交叉兼容性达成共识?这是ECMA的努力吗?
#1 楼
几乎所有成熟的语言都由规范定义,并且编译器或解释器会尝试遵循该规范中定义的标准。但是除非标准由语言的作者定义,否则它们不会成功。您可以在网上找到C ++ 2003标准,C#4规范,Java 7规范以及更多其他内容。其中许多具有ECMA或ISO标准化编号。这些只是可以注册标准并使之更正式的组织。
从历史上看,Ruby的处理方式有所不同,它具有一组可执行的测试作为规范。因此,如果要编写解释器并将其称为标准Ruby,则只需创建一个通过所有这些测试的解释器。但是,甚至Ruby最终也可能会成为更正式的规范。
Java脚本没有什么不同,除了它的发展方式。
Java脚本最初是由Netscape创造的。他们称其为LiveScript,但它看起来与Java类似,因此与Sun达成了交易,使Netscape和Java的营销受益。微软拥有VBScript,并且(出于某种原因可能会丢失原因)基本上复制了Javascript,但是该名称归Sun所有,所以他们客气地将其称为JScript。
但是JScript在语法上与Javascript非常相似大量使用COM,例如IE5和6使用
new ActiveXObject("Microsoft.XMLHTTP");
实例化XMLHttpRequest对象。因此,并行的Java相似但又不同的“方言”应运而生。随着时间的流逝,拥有比IE更低的市场份额的浏览器的各种团体都试图对语言进行标准化,多年来,微软一直拒绝。直到V8。V8很快。它设定了一个全新的市场标准。它使其他所有东西看起来都很差。
而且,通过针对微软的各种反托拉斯案件,IE失去了市场份额。突然之间,支持标准化符合Microsoft的利益。我们还没有到位,但是它在正确的轨道上。
同时,V8是开源的,它使人们可以开始思考快速Javascript解析器的新用途,例如Node.JS。 。
但是,回到您的问题:什么是Javascript?它是ECMAScript的通用名称(原始名称),是一种原型语言规范,通常但并非专门用于在浏览器中导航和操作域对象模型。
ECMA-262只是像ECMA-334这样的标准定义是C#的标准定义。早在99年ECMA-262编写时,ECMAScript是所有有关方面都可以同意的唯一名称。
评论
如果我可以多次对您的答案进行投票,我会这样做的:-)这确实有助于使一些事情变得更清楚。 C编译器的类比使情况有点可理解:-)除了JavaScript未编译为二进制并且最终用户看到非/准功能脚本之外。因此,我是否了解我无法建立符合标准的页面,并希望该页面在所有浏览器上均能正常运行? (但仍是有效词)。
–卢阁下。
2012年10月22日23:44
@LordLoh。那是对的。但是您可以允许jQuery和Prototype之类的库为您抽象化差异。
– pdr
2012年10月22日23:49
这篇文章和研究始于jQuery动画无法在IE9上运行时,我撒谎anybrowser.org广告系列的构想,并希望我能坚持一个标准。 HTML5 / CSS3 / JS。 JS最终成为我的引擎盖中的错误。
–卢阁下。
2012年10月22日23:57
@LordLoh。我不太确定那是jQuery的错。快速浏览一下就会发现HTML的问题(例如,缺少引号),并且当您像这样最小化Javascript时,如果您不太准确,可能会得出奇怪的结果。我记得很久以前的一个问题,我错过了一个分号,并且只有在使用一种主要浏览器进行压缩后,它才失败。 jQuery非常稳定,应该可以与IE9很好地兼容。
– pdr
2012年10月23日在0:11
@LordLoh。 console.log是您的问题。除非您打开开发人员工具栏(并因此创建对象“控制台”),否则它不会起作用。
– pdr
2012年10月23日在0:25
#2 楼
Javascript是ECMAScript的常用实现。这与Scheme系列非常相似。在Scheme中,您有一个高度规范的规范。当前版本是R6RS,尽管到目前为止,R5RS是更普遍实施的标准。由于Scheme的年代和普遍的理念,其实现比ECMAScript更加分散。由于Mozilla的Firefox和Google的Chrome的市场份额呈爆炸性增长,因此Java碰巧现在很普遍。它最初是在Netscape Navigator中立足的,后来最终变成了Mozilla浏览器,然后变成了Firefox(如果与Scheme人群一起运行,则变成了Iceweasel)。
现在这里有一个小问题。 Javascript的大部分性能来自解析器和运行它的引擎。这是浏览器之间真正的区别显而易见的地方。 Spidermonkey运行Javascript的方式与V8不同。 Javascript仍然有一些不足之处,例如缺少一个完全通用的库,尽管这正在研究中。
因此,如果Javascript是C ++,则ECMAScript将是C ++ 11,而UNIX和G ++将成为C ++ 11。最接近“标准”,而用于.NET的C ++和目标C ++则远远超出了ECMAScript中Actionscript的方式
评论
您忘了提及ActionScript,它是ECMA的一种方言,与您可能称之为Javascript无关。一致性不是很多(正如您已经强调的那样),但是jslint非常适合检查代码。
@MadaraUchiha-我同意“只使用jQuery。一切都会好的。”不会好的。这就是为什么我开始对此进行研究。我的网站bharath.lohray.com在Chrome和Firefox上运行良好,W3C验证程序也不会产生任何错误,但在最新的IE上却浪费了很多时间!而且,尽管我喜欢anybrowser.org/campaign的人们的想法,但我无法真正成为跨浏览器!
关于您的页面,滚动非常烦人并且位于顶部。只是IMO。即使您实际上是一位领主,“领主”的头衔也听起来像个地狱。
它不必要地浮华。您不会在SE上看到帖子上下滑动。如果这是一个专业的网站,并且您仍然希望过渡,请使用更谨慎的方法,例如淡入/淡出。