到底是什么JavaScript?


95

这一切始于我正在寻找一种方法来测试我的网页的JavaScript一致性,例如W3C HTML Validator。我还没有找到。所以让我知道你是否知道任何...

  1. 我在JavaScript的官方页面中找到了ECMA Script。这些人已经将脚本语言标准化(我不再喜欢用JavaScript!),并将其称为ECMA-262(维基百科)。他们的最新作品是5.1版

  2. JavaScript由Mozilla Corporation开发,其最后一个稳定版本是1.8.5(请参阅此),它基于ECMA的5.1版。

  3. 链接Wikipedia页面提到了方言。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的努力吗?


10
您忘了提及ActionScript,它是一种ECMA方言,与您可能称之为Javascript无关。
DaveRandom

4
一致性不是很多(正如您已经强调的那样),但是jslint非常适合检查代码。
SomeKittens 2012年

2
@MadaraUchiha-我同意“只使用jQuery。一切都会好的。” 不会好的。这就是为什么我开始对此进行研究。我的网站bharath.lohray.com在Chrome和Firefox上运行良好,W3C验证程序也不会产生任何错误,但在最新的IE上却浪费了很多时间!而且,尽管我喜欢anybrowser.org/campaign的人们的想法,但我不能真正成为跨浏览器!
卢勋爵。

7
关于您的页面,滚动非常烦人并且位于顶部。只是IMO。而且,即使您实际上是一位阁下,“领主”标题听起来也像地狱般浮夸。
NullUserException

11
它不必要地浮华。您不会在SE上看到帖子上下滑动。如果这意味着要成为一个专业的网站,并且您仍然想要过渡,请使用更谨慎的方法,例如淡入/淡出。
NullUserException 2012年

Answers:


96

几乎所有成熟的语言都由规范定义,并且编译器或解释器尝试遵循该规范中定义的标准。但是除非标准是由语言的作者定义的,否则它们很少会成功。

您可以在线找到C ++ 2003标准C#4规范Java 7规范等等。其中许多具有ECMA或ISO标准化编号。这些只是您可以向其注册标准并使之更正式的组织。

Ruby在历史上做事略有不同,以一组可执行的测试作为规范。因此,如果您想编写一个解释器并将其称为标准Ruby,则只需创建一个通过所有这些测试的解释器。但即使是Ruby,最终也有可能成为更正式的规范

Java脚本没有什么不同,除了它的发展方式。

Javascript最初是由Netscape创建的。他们称其为LiveScript,但它看起来与Java类似,因此与Sun达成了交易,使Netscape和Java的营销受益。微软拥有VBScript,并且(由于可能的原因而无法推测)基本上复制了Javascript,但是该名称归Sun所有,所以他们客气地将其称为JScript。

但是JScript在语法上与Javascript非常相似,但是却大量使用了COM-例如,IE5和6使用实例化XMLHttpRequest对象new ActiveXObject("Microsoft.XMLHTTP");

因此,诞生了并行,相似但又不同的Java语言。随着时间的流逝,拥有比IE更低的市场份额的浏览器的各种组织都试图对语言进行标准化,多年来,微软一直拒绝。直到V8。

V8速度很快。它设定了一个全新的市场标准。它使其他一切看起来很差。

而且,通过针对微软的各种反托拉斯案件,IE失去了市场份额。突然之间,支持标准化符合Microsoft的利益。我们还没有到那儿,但是它在正确的轨道上。

同时,V8是开源的,这让人们开始思考了一个快速的JavaScript语法分析器的新用途,如Node.js的

但是,回到您的问题:什么是Javascript?它是ECMAScript的通用(原始)名称,ECMAScript是一种原型语言规范,通常(但不仅限于),用于在浏览器中导航和操作域对象模型。

ECMA-262只是标准定义,就像ECMA-334是C#的标准定义一样。早在99年ECMA-262编写时,ECMAScript是所有有关方面都可以同意的唯一名称。


7
如果我可以多次对您的答案进行投票,我会这样做的:-)这确实有助于使一些事情变得更清楚。C编译器的类比使情况有点容易理解:-)除非JavaScript没有编译为二进制文件,并且最终用户看到了非/准功能脚本。因此,我是否了解我无法建立符合标准的页面,并希望该页面在所有浏览器上均能正常运行?(但仍是有效词)。
卢勋爵。

1
@LordLoh。那是对的。但是您可以允许jQuery和Prototype之类的库为您抽象化差异。
pdr 2012年

这篇文章和研究始于jQuery动画在IE9上不起作用的时候,我撒谎anybrowser.org广告系列的构想,希望我能坚持一个标准。HTML5 / CSS3 / JS。JS最终成为我的引擎盖中的错误。
卢勋爵。

1
@LordLoh。我不太确定那是jQuery的错。快速浏览一下就会发现HTML的问题(例如,缺少引号),并且当您最小化这样的Javascript时,如果您不太准确,可能会得出奇怪的结果。我记得很久以前的一个问题,我错过了一个分号,并且仅在其中一种主要浏览器中进行压缩后它才失败。jQuery非常稳定,应该可以与IE9很好地兼容。
pdr 2012年

5
@LordLoh。console.log是您的问题。除非您打开开发人员工具栏(并因此创建对象“控制台”),否则它不会起作用。
pdr 2012年

23

Javascript是ECMAScript的常用实现。这与Scheme家族的情况非常相似。在Scheme中,您具有高度正式的规范。当前版本是R6RS,尽管到目前为止,R5RS是更普遍实施的标准。由于Scheme的年代和普遍的理念,其实现比ECMAScript更加分散。

由于Mozilla的Firefox和Google的Chrome的市场份额呈爆炸性增长,因此Javascript如今正变得很普遍。它最初在Netscape Navigator中立足,最终变成了Mozilla浏览器,然后变成了Firefox(如果与Scheme人群一起运行,则变成了Iceweasel)。

现在,这里有个小玩意儿。Javascript的大部分性能来自解析器和运行它的引擎。这是浏览器之间真正的区别显而易见的地方。Spidermonkey运行Javascript的方式与V8不同。Javascript仍然存在一些粗糙的地方,例如缺少一个完全通用的库,尽管这正在努力中。

因此,如果Javascript是C ++,则ECMAScript将是C ++ 11,其中UNIX和G ++最接近“标准”,而.NET和Objective C ++的C ++与ECMAScript的Actionscript的方式相距甚远

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.