JS中的undefined是什么?

 生活雜談     |      2020-01-05 10:26
  JS中的undefined到底是什么?
  JavaScript中的Undefined。
  我們已經看到了創建執行上下文的第一階段,其中有一個用于全局執行上下文的全局對象。有一個特殊的變量叫做this,它總是存在的。這種現象稱為提升,其中設置了變量和函數。
  對于變量最初設置為undefined。
  這是什么意思呢?
  讓我們回過頭來舉一個簡單的例子:
  index.js
  var a;
  console.log(a);
  得到:
  
undefined是什么1
  如果我們不使用var直接a:
 
undefined是什么2
  實際上會直接報未定義的錯,但是有些人會認為,Undefined和not defined指的是同一件事。其實不是的,Undefined是已經存在的變量,但是沒有賦值,Javascript會給這個已經存在的變量一個默認的undefined值。
  下面我們來做一個驗證:
  index.js:
  var a;
  console.log(a);
  //===在JS中會從數據類型與值兩方面進行比較,稱之為嚴格比較相對安全。
  if(a===undefined){
  //注意這里undefined,不是字符串,而是JS的關鍵字。所以不加''
  console.log("a is undefined");
  }else{
  console.log("a is not defined")
  }
  我們來看下結果:
undefined是什么3
  如果我們現在給變量a賦值"helloworld":

undefined是什么4
  但是我們來看下不聲明變量a,但是訪問變量a:

undefined是什么4
  我們會直接得到一個未定義(not defined)錯誤。這是因為在初始執行上下文創建階段中,當我們訪問的a變量沒有被聲明過時,也就說明不會被分配內存空間。因此,當執行該代碼時,它說:“嘿,老弟,我根本沒有在內存中”。因此它提供了not defined,錯誤信息。當然了,這是瀏覽器中的JavaScript引擎所提供的信息。
  但是,當我們聲明var a時,在創建階段將a放入內存。因此,執行上下文看到了var a并在內存中設置了a。
  即使我沒有將其設置為值,JavaScript引擎已經將其設置為undefined的特殊值。
  因此,undefined并不像是空的或者不存在。它實際上并不存在但它是一個值,實際上占用了內存。這是一個特殊的JS關鍵字。一個特殊的值,表示這是JavaScript最初設置的值。
  不要將變量設置為Undefined
  切勿將自己的變量設置為等于undefined的變量。那么真的很難分辨某些變量是否是未定義的,這真的很有用。
  這個習慣能夠將幫助我們進行調試,發現那些變量是聲明了但是沒有賦值的。
  總結
  我們再來回顧一下,undefined是一個特殊值,也是JavaScript中的特殊關鍵字。這是變量在創建階段獲得的一個默認值。創建執行上下文的第一階段設置變量的內存然后在該存儲空間中放入名為undefined的值。這就是JavaScript所稱之為的未定義。
  那我們在聲明變量的時候,可以var a;然后在使用的時候再賦值a或者var a="helloworld";然后直接使用該變量。