我想在第一個操作的幫助下,你只要檢查這個事件是否在窗口對象中,所以它返回true。另外兩個告訴你,如果這樣的處理程序已經實現,並且沒有實現,但你會得到錯誤。 您可以檢查以下內容:
window.onhashchange = function() {}
window['onhashchange'];
啊,反正現在它將返回true,因爲我們已經定義了變量...所以最有可能
'onhashchange' in window;
只檢查,如果瀏覽器支持
window['onhashchange']; //returns false
window.onhashchange; //returns false;
只是檢查,如果處理已經實現
PS。你也可以在Javascript IN operator compatibility有趣,在這裏@Andy E寫道:
當你用它來檢查事件支持時,你應該謹慎行事。除Mozilla之外的所有實現都支持元素中的「eventname」作爲DOM事件的測試,除非處理程序定義爲,否則Firefox將導致此處爲false。
UPDATE:看「x合窗口」和「window.x」之間的差異(其等於窗口[「X」]),看看下面的腳本,其輸出:
var foo = {};
console.info('bar' in foo); // false, because no such proeprty
console.info(foo.bar); // undefined, because no such property
console.info(foo.bar ? 'true' : 'false'); // 'false' because no such property
foo = { bar: false };
console.info('bar' in foo); // true, because there is such property
console.info(foo.bar); // false, because this is value of bar property
console.info(foo.bar ? 'true' : 'false'); // 'false' because foo.bar is false
foo = { bar: 1 };
console.info('bar' in foo); // true, because there is such a property
console.info(foo.bar); // 1, because this is value of bar proeprty
console.info(foo.bar ? 'true' : 'false'); // 'true', because foo.bar is 1 (which is not 0 which meant to be false)
foo = { bar: 0 };
console.info('bar' in foo); // true, because there is such a property
console.info(foo.bar); // 0, because this is value of bar proeprty
console.info(foo.bar ? 'true' : 'false'); // 'false', because foo.bar is 0 (which meant to be false)
UPDATE2:Detecting event support without browser sniffing - 這篇文章說明如何使事件檢測跨瀏覽器(因爲「事件窗口」並不在Mozilla工作;這篇文章中還回答了爲什麼它是如此)
onhashchange是非標準(據我所知)和th因此不完全支持。我期望它或者被逐漸淘汰,或者是一些奇怪的事情。嘗試setInterval循環。現在,你顯然是一位經驗豐富的使用window ['onhashchange']的JavaScript開發人員,但我坦白地說自己從未聽說過它。 – 2011-01-21 07:40:17