这是我在无数个小时修复JS与跨浏览器兼容(主要是IE)后一直在思考的问题:为什么不是Javascript 一致的在浏览器中?< / p>
我的意思是,为什么JS不能像Java和Flash一样好看?相反,我们必须采用像jQuery这样的框架。不要误会我的意思,他们让我的生活更轻松 - 但为什么他们甚至首先存在?
这有历史原因吗?推出浏览器的公司是否只运送自己的JS引擎?使标准化如此困难的政治是什么?
(注意:我知道问题的很大一部分与DOM有关,但问题仍然存在)。
答案 0 :(得分:16)
Javascript核心语言大部分 一致(参考1999年发布的ECMAScript第3版)。
这是导致头痛的DOM实现。部分原因是因为在某一点上没有DOM规范,因此浏览器可以在编写访问和操作网页中的html元素的规则方面做任何他们想做的事情。
例如:
window.addEventListener
用于DOM支持浏览器,而window.attachEvent
用于IE。 textContent
用于DOM支持浏览器,innerText
用于IE。getElementById
在IE和Opera中是错误的,因为它按名称返回元素getAttribute('href')
返回不一致的值还存在与浏览器的CSS支持相关的问题。
语言核心不一致就像是
但是,是的,简而言之就是之前,没有标准。从那以后,w3提出了标准,但每个浏览器供应商都有自己的方式来实现它。没有管理机构强制供应商完全应用规范。
答案 1 :(得分:7)
是的,这可能是主要原因。没有统一的JS引擎;有ECMAScript的各种实现。推出浏览器的公司是否只发布了自己的JS引擎?
答案 2 :(得分:2)
浏览器推出自己的实现,简单明了。这与渲染和CSS以及浏览器中所有不同的原因相同。的Java /闪光灯/等。更通用,因为它们被抽象出浏览器并通过某种插件访问。但是他们的实际核心实现与浏览器是分开的,并由单个供应商控制。
答案 3 :(得分:2)
要添加到其他答案: 是的历史原因。我可以自己写这个,但引用Wikipedia更容易:
JavaScript最初是由开发的 Netscape的Brendan Eich 名称Mocha,后来改名为 LiveScript,最后是JavaScript。 LiveScript是官方名称 首次发货的语言 Netscape Navigator的测试版 在1995年9月的2.0,但它被联合重命名为JavaScript Sun Microsystems发布公告 1995年12月4日部署时 在Netscape浏览器版本2.0B3中。
[...]
JavaScript很快就获得了 作为客户端的广泛成功 用于网页的脚本语言。作为一个 结果,微软开发了一个 兼容的语言方言, 将其命名为JScript以避免商标 的问题。 JScript添加了新的日期方法 修复非Y2K友好的方法 JavaScript,基于 java.util.Date。包含了JScript 在Internet Explorer 3.0中,发布于 1996年8月。方言是 被认为是如此相似 术语“JavaScript”和“JScript”是 经常互换使用。微软, 但是,注意到了几十种方式 JScript不符合ECMA。
1996年11月,Netscape宣布 它已经提交了JavaScript Ecma International考虑 作为行业标准,和 随后的工作导致了 标准化版本名为ECMAScript。
正如您所看到的,标准ECMAScript的开发时间晚于原始语言。这只是在当前的Web浏览器实现中调整此标准的问题,这一点仍在继续,ECMAScript本身的开发也是如此(例如,参见2009年12月发布的ECMAScript 5规范)。