这更像是一个好奇的问题,看看事情是如何演变的,因为我目前没有进行任何类型的网络编程,但我记得写JavaScript
时是这样的(伪代码):
if (foo exists)
call foo
else if (fooAsFirefoxNamedIt exists)
call fooAsFirefoxNamedIt
else if (fooAsOperaNamedIt exists)
call fooAsOperaNamedIt
else
message "We are sorry, you have Internet Explorer"
尘埃落定了吗?环顾四周看起来有一个标准的 ECMA-262 。是对的吗?如果是这样,所有主要的现代浏览器都实现了标准化的JavaScript吗?
答案 0 :(得分:3)
这有两个主要方面:
JavaScript是语言,稳定,
为JavaScript提供的浏览器功能(例如addEventListener
与attachEvent
)已稳定。
多年来,JavaScript远远太多稳定。 :-) ECMAScript3于1999年发布;直到十年之后,我们才看到下一次更新(ECMAScript5,没有发布ECMAScript4)。
除了陈旧的浏览器(IE6,IE7)之外,JavaScript功能在ECMAScript5到达之前很长一段时间都是稳定的(我认为除Array#indexOf
之外)。然后,虽然大多数浏览器供应商都很快地将他们的浏览器完全合规,但微软拖了很多年,所以你看到并且仍然看到很多垫片/填充物Array#forEach
,Object.create
等等,因为人们已经/必须支持在ECMAScript5之前出现的IE8,直到IE9出现已经过去了几年。
可悲的是,IE8 remains in significant use感谢它是Windows XP的最新版本,尽管它已经停止使用,但它本身仍然有很大的用途。
下一个版本(ECMAScript6又称ES6)即将到期"很快" (有些人乐观地称之为" ECMAScript 2015"),当然因为ES6中有一些非常重要的功能(它很容易成为JavaScript最大的更新),所以这些功能将会出现在跨越供应商的单调和#39;浏览器发布。与此同时,许多功能今天都可以通过 transpilation 使用,您可以在ES6中编写代码,然后将其转换到ES5。如果您搜索" ES6 transpiler"你会找到几个。
环顾四周看起来有一个标准的ECMA-262。是吗?
这对JavaScript(上图)来说是正确的,但对于其他事情来说,HTML5 specification更多,这远远超出了HTML。它也是各种DOM specifications。
比五年前的事情更好 很多 ,主要有两个原因:
浏览器供应商在建立浏览器应该执行的标准方面比以往任何时候都更加合作,从File API到web workers到web storage以及其他十几项内容
微软已经认真努力使IE符合标准。 IE9在标准符合性方面是一个比IE8好得多的浏览器,IE10更好,IE11更好。
一些有用的参考资料:
答案 1 :(得分:0)
Javascript有一些标准(称为ECMAScript),浏览器或多或少地实现它。然而,语言本身只是你需要的一小部分,以使一些有用的东西。 DOM API不太标准,许多开发人员使用jQuery或其他框架来处理不一致的问题。
答案 2 :(得分:0)
是的..所有浏览器都使用标准化的javascript ..但是有一些浏览器支持的功能,而不是少数...
示例:实施AJAX的方法还取决于您使用的浏览器
<?xml version="1.0" encoding="UTF-8"?>
<model name="sm:modelContent" xmlns="http://www.alfresco.org/model/dictionary/1.0">
<description>Content Model</description>
<author>Arak</author>
<version>1.0</version>
<imports>
<import uri="http://www.alfresco.org/model/dictionary/1.0"
prefix="d" />
<import uri="http://www.alfresco.org/model/bpm/1.0"
prefix="bpm" />
</imports>
<namespaces>
<namespace uri="http://www.some.com/model/content/1.0" prefix="sm" />
</namespaces>
<!-- Types -->
<types>
<type name="sm:contentParent">
<parent>cm:content</parent>
</type>
<type name="sm:contentChildren1">
<parent>sm:contentParent</parent>
</type>
<type name="sm:contentChildren2">
<parent>sm:contentParent</parent>
</type>
<type name="sm:contentChildren3">
<parent>sm:contentParent</parent>
</type>
</types>
<!-- Aspects -->
<aspects>
<!-- An Aspect -->
<aspect name="sm:otherOtherAspect">
<properties>
....
</properties>
</aspect>
<!-- Other Aspect -->
<aspect name="sm:otherAspect">
<properties>
....
</properties>
</aspect>
<!-- An Other Aspect -->
<aspect name="sm:anOtherAspect1">
<properties>
....
</properties>
</aspect>
<aspect name="sm:anOtherAspect2">
<properties>
....
</properties>
</aspect>
<aspect name="sm:anOtherAspect3">
<properties>
....
</properties>
</aspect>
... can exist N ...
<!-- Other Other Aspect -->
<aspect name="sm:anAspect1">
<properties>
....
</properties>
</aspect>
<aspect name="sm:anAspect2">
<properties>
....
</properties>
</aspect>
<aspect name="sm:anAspect3">
<properties>
....
</properties>
</aspect>
... can exist N ...
</aspects>
同样有其他功能 事件:INPUT 受Chrome和Firefox支持,但不受IE支持 所以我们在使用特定的javascript函数之前必须考虑浏览器的javascript兼容性。
了解更多信息:http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf