undefined 有什麼問題
- 因為 undefined 不是保留字(Reserved Word),它只是全域性物件的一個屬性,在低版本的IE瀏覽器中會被重寫。
var undefined = 10;
// undefined -- chrome
// 10 -- IE 8
alert(undefined);
複製程式碼
- 在區域性作用域中 undefined 還是可以被重寫
(function() {
var undefined = 10;
// 10 -- chrome
alert(undefined);
})();
複製程式碼
為什麼要用 void 0 代替
MDN 定義: The void operator evaluates the given expression and then returns undefined.
意思是說 void 運算子可以對給定的表示式求值,並且無論後面跟的是什麼,都是返回 undefined,所以說不論是void 0 還是void 1都是可以的,更重要的是void不能被重寫。
JavaScript URIs
當使用者點選一個javascript: URI
時,它會執行URI中的程式碼,然後用返回的值替換頁面中的內容,除非返回的事undefined。
<a href="javascript:void(0);">
這個連結點選之後不會做任何事情,
如果去掉 void(),點選之後整個頁面會被替換成一個字元 0。
</a>
<p> chrome中即使<a href="javascript:0;">也沒變化,firefox中會變成一個字串0 </p>
<a href="javascript:void(document.body.style.backgroundColor='green');">
點選這個連結會讓頁面背景變成綠色。
</a>
複製程式碼
注意,雖然這麼做是可行的,但利用 javascript: 偽協議來執行 JavaScript 程式碼是不推薦的.