2017-04-17 197 views
4

,當我把console.log在瀏覽器控制檯其中有未申報的,將返回未捕獲的ReferenceError任何變量:變量沒有定義。但是當我在瀏覽器控制檯把console.log(name)返回空和未定義。看到下面的圖片。任何想法,爲什麼發生這種情況..奇怪的問題

enter image description here

我在Chrome和Firefox開發者工具進行了測試。

注:我使用clear()來清除控制檯

+0

'name'is不是未定義它的'「」(空字符串)。 'undefined'是'console.log'本身的rturned值(注意空行和'''undefined'前面)! –

回答

8

name是一個全局變量這是在window對象。所以當你登錄時,它會發現全局的,這個值是空字符串("")。

console.log(name); 
 
console.log(window.name);
不具有連接到該窗口並在控制檯日誌或瀏覽器仍在工作

2

什麼是一個全局對象,在這種情況下,你在你的控制檯打印window.name。

嘗試檢查這種方式,在控制檯中鍵入下面的代碼:

window.name = 'stackoverflow'; 

然後再次嘗試做的console.log(名稱),你會看到這個時候你看到「計算器」。所以基本上你在你的控制檯打印的名字,是窗口名稱...

有關window.name更多信息,請訪問以下鏈接:

https://developer.mozilla.org/en-US/docs/Web/API/Window/name

2

這是發生了什麼事時,您鍵入聲明console.log(name)

  1. 你正試圖從全球執行上下文(登錄到控制檯在您的案件)中訪問變量name
  2. 由於您是從全局執行上下文中調用它,它將檢查window對象是否具有名爲的屬性,因爲在瀏覽器中,全局範圍由window對象表示。
  3. 因爲你以前從未聲明過這個變​​量,所以打字window.name或者只是name應該返回姓名未定義
  4. 但它返回一個空行,這是因爲window對象具有一組預定義/本機屬性,名稱就是其中之一。
  5. window.name缺省值爲「」(空字符串),因此它將一個空字符串記錄到控制檯。

現在,這是發生了什麼事,當你鍵入console.log(name100)

  1. 和以前一樣(name100而不是名稱)。

  2. 和以前一樣(name100代替名字)。

  3. 您還沒有聲明name100,它既不是窗口對象的本地屬性,所以它只是返回name100 is not defined

如果是隨窗口對象,你可以檢查此鏈接,你想檢查屬性: