我认为我不需要提供示例,因为每个Web开发人员都知道您需要测试Javascript以确保它在不同浏览器之间兼容。我没有得到的是为什么。不是Javascript Javascript?它就像.NET框架在一台计算机上的行为不同于在另一台计算机上行为。任何人都可以对此有所了解,可能还有一些源链接可以同意他们的答案吗?
答案 0 :(得分:6)
简短的回答是每个浏览器都为JS编写自己的解释器
答案很长
要理解为什么编程语言的功能不同,您必须了解编程语言在执行时会发生什么。首先,有两种语言被解释和编译。编译语言在执行之前从人们可读的“代码”转换为机器代码,并作为二进制文件分发。
解释语言是即时编译的,JS是其中一种语言。即时编译语言意味着什么?好吧,计算机除了1和0之外什么都不懂,因此所有更高级别的语言必须分解为指令然后分解为二进制。在动态编译某些内容时,它会编译一行,然后运行它,然后编译下一行。 (当然有复杂但实际上还有它的缺点)
因为JS直到最近才真正拥有一个独立的解释器,并且浏览器是JS的主要目的,每个公司都必须编写自己的解释器才能进入他们的浏览器。微软,Mozilla,Netscape ......每个人都需要考虑如何处理某些事情然后执行它们。
由于这两件事情首先发生,如果两个人正在努力,你永远不会得到同样的东西。想想当你参加Comp Sci课程时,每个人都必须制作一个计算器应用程序,但每个人都采取不同的方法。这种情况一直伴随着js发生,并导致一些浏览器在其他浏览器飞行时爬行。
第二个问题是,公司会按照自己的方式设置,他们有太多的时间和精力投入到他们的翻译中,并且不想在修改工作时重新开始并且更便宜。这意味着过去出现的差异,当JS使用较少而且对于Web开发几乎没有任何关键时,这仍然只是因为当它围绕着它自己的解释器时,很难用webkit推出一个全新的IE版本。多年。
答案 1 :(得分:3)
阅读本文 - > http://www.quirksmode.org/js/intro.html有很多版本的JavaScript实现 - 所有版本都有差异。
答案 2 :(得分:0)
每个浏览器都有不同版本的Javascript,有些只实现每个版本的某些功能。以下是releases notes for IE9,状态javascript在IE8和IE9上的执行方式不同。
答案 3 :(得分:0)
嗯,事实上,.NET 的行为有所不同,具体取决于您使用的实现(Microsoft或Mono)。
也就是说,除了小的例外,它与标准是移动目标一样。它是在Netscape的时代推出的,部分由微软作为JScript复制,部分由ECMA标准化,并由浏览器供应商独立扩展,每个人都有自己的想法,在Javascript中有什么好主意。
很难定义 Javascript。在当今所有浏览器中通常作为基线实现的是称为Javascript 1.5又名ECMA-262第3版的功能集。浏览器供应商(和其他人)正在研究一种名为ECMAScript 5的东西,但它会持续数年,直到所有浏览器都完全支持这一点。
当然,每个浏览器在其实现中都有自己的错误。其中一个最着名的例子是IE中的尾随逗号:
// works in all browsers:
var a = [1, 2, 3]
// works in all browsers but IE
var b = [1, 2, 3,]
答案 4 :(得分:0)
答案 5 :(得分:0)
嗯,javascript实际上是EcmaScript的一个子集,这是标准推荐。在浏览器中实现这种建议仅取决于编辑的意愿。这导致几种实现(javascript,jscript,v8等等)在某些情况下表现不同。除此之外,布局引擎因浏览器而异(gecko,trident,webkit等等),你会发现使用javascript并不是那么简单;)。
答案 6 :(得分:0)
Internet Explorer有JScript,这是Microsoft自己的JavaScript实现。他们有一个不遵守任何规范的长篇故事。
至于其他人 - 他们在JavaScript中自己实现了函数和对象。例如,你有一个理论函数foo,它在每个浏览器上都是相同的名称。但它的编写方式是不同的。这可能会导致执行时间不同或其他原因。
另一件事 - 每个浏览器都有自己的特定功能。没有人可以强迫他们不要这样做。