浏览器编程是否标准化,所有主要浏览器是否都符合标准?
Is browser programming standardized and do all major browsers conform?
这更像是一个好奇的问题,想看看事情是如何演变的,因为我目前没有进行任何类型的网络编程,但我记得写 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?
Javascript 有一些标准(称为 ECMAScript),浏览器或多或少地实现了它。但是,语言本身只是制作有用的东西所需要的一小部分。 DOM API 不太标准,因此许多开发人员使用 jQuery 或其他框架来处理不一致问题。
这有两个主要方面:
有JavaScript语言,稳定,
提供给 JavaScript 的浏览器功能(例如 addEventListener
与 attachEvent
)稳定。
JavaScript稳定了吗?
JavaScript 多年来 也 稳定。 :-) ECMAScript3 于 1999 年发布;直到十年后我们才看到下一次更新(ECMAScript5,没有发布 ECMAScript4)。
除了过时的浏览器(IE6、IE7)之外,JavaScript 特性在 ECMAScript5 到来之前的很长一段时间内都是稳定的(除了 Array#indexOf
,我认为)。然后,虽然大多数浏览器供应商相当快地使他们的浏览器完全合规,但微软拖了很多年,所以你看到并且仍然看到很多 Array#forEach
、Object.create
等的 shims/polyfills因为人们 had/have 支持 IE8,IE8 在 ECMAScript5 之前出现,而 IE9 已经好几年了。
遗憾的是,IE8 remains in significant use 由于是 Windows XP 可用的最新版本,它本身尽管已停产,但仍在大量使用。
下一个版本(ECMAScript6 aka ES6)即将发布 "soon"(有些人乐观地称它为 "ECMAScript 2015"),自然是因为 ES6 中有一些非常重要的特性(它是最大的更新 JavaScript 已经很容易),这些将在供应商的浏览器版本中以点点滴滴的形式出现。与此同时,今天可以通过 transpilation 使用许多(尽管不是全部)功能,您可以在 ES6 中编写代码,然后 transpile 将其转换为 ES5 .如果您搜索 "ES6 transpiler",您会找到多个。
是否提供了 JavaScript 稳定的浏览器功能?
looking around it looks that there is a standard ECMA-262. Is that right?
JavaScript(上图)是正确的,但对于其他方面,HTML5 specification, which goes well beyond just HTML. It's also the various DOM specifications。
情况比五年前好很多,主要有两个原因:
浏览器供应商比以往任何时候都更加密切地合作,为浏览器应该做什么建立标准,从 File API to web workers to web storage 和其他十几个方面。
Microsoft 认真努力使 IE 符合标准。就标准合规性而言,IE9 是比 IE8 好得多的浏览器,IE10 更好,IE11 更好。
一些有用的参考资料:
是的..所有浏览器都在使用标准化javascript..但是有些浏览器支持一些功能,而且不是少数..
示例:实现方式AJAX也取决于您使用的浏览器
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
类似的还有这样的函数
事件:chrome 和 firefox 支持 INPUT,但 IE 不支持
所以我们在使用特定的javascript功能之前必须考虑浏览器javascript兼容性。
更多信息:http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf
这更像是一个好奇的问题,想看看事情是如何演变的,因为我目前没有进行任何类型的网络编程,但我记得写 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?
Javascript 有一些标准(称为 ECMAScript),浏览器或多或少地实现了它。但是,语言本身只是制作有用的东西所需要的一小部分。 DOM API 不太标准,因此许多开发人员使用 jQuery 或其他框架来处理不一致问题。
这有两个主要方面:
有JavaScript语言,稳定,
提供给 JavaScript 的浏览器功能(例如
addEventListener
与attachEvent
)稳定。
JavaScript稳定了吗?
JavaScript 多年来 也 稳定。 :-) ECMAScript3 于 1999 年发布;直到十年后我们才看到下一次更新(ECMAScript5,没有发布 ECMAScript4)。
除了过时的浏览器(IE6、IE7)之外,JavaScript 特性在 ECMAScript5 到来之前的很长一段时间内都是稳定的(除了 Array#indexOf
,我认为)。然后,虽然大多数浏览器供应商相当快地使他们的浏览器完全合规,但微软拖了很多年,所以你看到并且仍然看到很多 Array#forEach
、Object.create
等的 shims/polyfills因为人们 had/have 支持 IE8,IE8 在 ECMAScript5 之前出现,而 IE9 已经好几年了。
遗憾的是,IE8 remains in significant use 由于是 Windows XP 可用的最新版本,它本身尽管已停产,但仍在大量使用。
下一个版本(ECMAScript6 aka ES6)即将发布 "soon"(有些人乐观地称它为 "ECMAScript 2015"),自然是因为 ES6 中有一些非常重要的特性(它是最大的更新 JavaScript 已经很容易),这些将在供应商的浏览器版本中以点点滴滴的形式出现。与此同时,今天可以通过 transpilation 使用许多(尽管不是全部)功能,您可以在 ES6 中编写代码,然后 transpile 将其转换为 ES5 .如果您搜索 "ES6 transpiler",您会找到多个。
是否提供了 JavaScript 稳定的浏览器功能?
looking around it looks that there is a standard ECMA-262. Is that right?
JavaScript(上图)是正确的,但对于其他方面,HTML5 specification, which goes well beyond just HTML. It's also the various DOM specifications。
情况比五年前好很多,主要有两个原因:
浏览器供应商比以往任何时候都更加密切地合作,为浏览器应该做什么建立标准,从 File API to web workers to web storage 和其他十几个方面。
Microsoft 认真努力使 IE 符合标准。就标准合规性而言,IE9 是比 IE8 好得多的浏览器,IE10 更好,IE11 更好。
一些有用的参考资料:
是的..所有浏览器都在使用标准化javascript..但是有些浏览器支持一些功能,而且不是少数..
示例:实现方式AJAX也取决于您使用的浏览器
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
类似的还有这样的函数 事件:chrome 和 firefox 支持 INPUT,但 IE 不支持 所以我们在使用特定的javascript功能之前必须考虑浏览器javascript兼容性。
更多信息:http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf