7
有人能指出在今天的瀏覽器中實現ECMAScript第3版的區別嗎? (Chrome,Safari,IE8,FF)在主流瀏覽器中仍然存在ECMAScript 3實現差異嗎?
當使用ECMAScript 3標準(而不是FF和IE對JScript和JavaScript的擴展)時,我們安全嗎?
有人能指出在今天的瀏覽器中實現ECMAScript第3版的區別嗎? (Chrome,Safari,IE8,FF)在主流瀏覽器中仍然存在ECMAScript 3實現差異嗎?
當使用ECMAScript 3標準(而不是FF和IE對JScript和JavaScript的擴展)時,我們安全嗎?
嗯,當然,也有執行漏洞,其中最嚴重的是,我不得不處理都在JScript中,微軟執行標準,例如:
FunctionExpressions的標識應僅在該訪問函數本身的內部範圍:
(function foo() {
alert(typeof foo); // "function"
})();
alert(typeof foo); // should be "undefined", on IE shows "function"
這個錯誤出現在當前所有的IE版本上,它只是在IE9預覽版上修復了。
,實際上是更糟的是,它創建了兩個函數對象,例如:
var foo = function bar() {};
if (typeof bar != 'undefined') { // the case of IE
alert(foo === bar); // false!!!
}
另一個衆所周知的JScript錯誤是"DontEnum Bug",如果它的作用域鏈的對象包含的屬性是不可枚舉(具有{ DontEnum }
屬性)時,如果該屬性上的其他對象遮擋的,它會留作爲不可枚舉,例如:
var dontEnumBug = {toString:'foo'}.propertyIsEnumerable('toString');
它將評估到false
上IE,全光照時這會導致問題g for-in
聲明,因爲屬性將不會被訪問。
JScript是具有最多問題的實現 - 儘管IE9的實現方式變得更好了。
推薦文章:
http://stackoverflow.com/questions/3663775/object-name-same-a-function-name/你問題的答案問題會對此做出很好的補充。至少FunctionStatement部分。 – 2010-09-09 18:26:37
不錯的例子。如果你(或其他人)有更多的文章突出ecmascript 3實施差異瀏覽器發送給他們:) – AlfaTeK 2010-09-09 22:57:38