為什麼用「void 0」代替「undefined」

Escape Plan發表於2019-03-14

undefined 有什麼問題

  1. 因為 undefined 不是保留字(Reserved Word),它只是全域性物件的一個屬性,在低版本的IE瀏覽器中會被重寫。
var undefined = 10;

// undefined -- chrome
// 10 -- IE 8
alert(undefined);
複製程式碼
  1. 在區域性作用域中 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 程式碼是不推薦的.

相關文章