為什麼在控制台的JavaScript 變數宣告會導致「未定義」
使用語法var a; 在JavaScript 控制台中宣告變數時,它列印“未定義”。這種行為可能令人驚訝,並且經常在 Stack Overflow 帖子中解決。然而,這些討論未能完全解釋為什麼會發生這種情況。
控制台的行為是 JavaScript 計算表達式的方式的直接結果。當評估語句 var a; 時,JavaScript 認為它本身就是一個表達式並傳回其結果,這確實是「未定義」。
更令人費解的是為什麼聲明變數時控制台也列印「未定義」具有初始值,例如 var a = 3。令人驚訝的是,如果存在另一個具有「真實」結果的語句,則 JavaScript 中的所有變數宣告語句(var 和 function)都會傳回「未定義」。
例如:
> var a = 3; undefined > var a = 3; a = 4; 4 > var a = 3; a = 4; var a = 5; function f() {}; 4
此行為根源於 eval 語句,根據 ECMAScript 規範,該語句:
var a = 4 語句的求值回傳(normal,empty,empty),滿足回傳「undefined」的條件。
但是,eval 也指定如果被評估程式的完成值不為空,則傳回最後一條語句的值。在最後一個範例中,a = 4 是最後一條語句,因此傳回其值 (4)。
總而言之,JavaScript 的控制台對於變數聲明列印“未定義”,因為這些聲明在計算為時會傳回“未定義”表達式。這種行為可能會令人困惑,特別是在為變數分配初始值時,但它源自於 JavaScript 表達式和語句的底層評估機制。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3