【JS幼幼班】Step.04 基本語法:變數


Posted by nancy543 on 2021-08-05

之前曾經有提到 JavaScript 是「物件導向」、「動態型別」、「弱型別」的腳本語言。

  • 物件導向:
    以物件 Object 為主的設計方法。把相關的變數跟函數打包在一起,放在同一個物件裡面執行。好處是程式碼易懂好維護,彈性擴展且可重複利用。

  • 動態型別:
    變數或常數不需要綁定或定義它的型別(或稱型態),只需要指定它的值。在程式執行期間,會自動根據賦予變數的值,去判斷這個變數的資料型別,然後記錄下來。

  • 弱型別:
    指對型別檢查的嚴格程度很弱,僅能嚴格的區分指令和資料。說白一點就是,允許編譯器或直譯器自作主張的容許隱性型別轉換。

    • 優點:使用簡單,撰寫時較無太多限制。
    • 缺點:風險較高。因為不包含型別資訊,所以在程式碼中可能會進行隱含的型別轉換,比如把字串(string)和數字(int)互轉,導致效能降低,並可能不符合程式語意。

接下來正式進入 JS 的基本語法。


變數 Variable

變數主要用於方便存取值,且因為 JS 是弱型別的關係,變數本身不帶有型別的資訊,而是讓編譯器或直譯器自己決定。

其實我們國中數學早就教過變數、常數和函數了,什麼 xyf(x)之類的可怕回憶,只是 1-20 年後的現在才驚覺派上用場。

通通忘了嗎?沒關係,我也早就忘了XD...先用一張簡單的圖來解釋變數:

可以看到求包養紙箱裝著貓咪,紙箱指的就是「變數 Variable」,貓咪就是「值 Value」。

  • 紙箱(變數)裡面一次只能裝一隻貓(值)。
  • 紙箱(變數)當然不一定只能裝貓(值),也可以是任何東西(字串、數字、布林等不同的資料型別)。
  • 如果已經裝了貓(值),也可以再替換成其他東西(任何資料型別)。

這樣是不是變得很容易理解變數的概念呢!


作用域 Scope

作用域指的是變數或常數的定義,與述句被存取到的範圍,其作用範圍可區分為「全域」和「本地端」。作用域規定了如何去找尋變數,也就是確定當前取得變數的權限。

在 JS 中,用來宣告「變數 Variable」與「常數 Constant」的關鍵字有三個,分別是 varletconst

ES6 之前,宣告變數的關鍵字只有 var,而且因為只能用「函數 Function」產生作用域,也就是只有使用函數才能劃出一個本地端的作用範圍,其他的區塊像 ifforswitchwhile 等,雖然有使用區塊述句 ({...}),但卻無法界定出作用域。

ES6 之後,則多了「區塊 Block」作用域這個新的方法。每個函數內部有自己的作用域,出了作用域就無法存取函數內定義的變數。而區塊作用域可使用大括號 {} 去定義區塊範圍,且用新的關鍵字 letconst 去宣告區塊作用域的變數或常數。

簡單來說,當你在函數「」宣告變數,它就會變成「全域變數」,而且是在程式碼裡的任何地方都可以被存取得到。反之,在函數「」宣告則稱為「區域變數」,就是只作用在當前區塊而已。

關鍵字 宣告變數/常數 作用域 可否變動 版本 特性
var 全域變數 全域、函數 ES5 1.宣告全域變數,或在「函數內」宣告而不管區塊範圍。
2.容易汙染全域,應避免使用。
let 區域變數 區塊 ES6 1.宣告區域變數的作用域只能在宣告的「區塊」中執行。
2.初始值可選擇性的設定。
const 常數 區塊 不可 ES6 1.宣告常數的作用域可以是「全域」,或在宣告的「區塊」中。
2.宣告後就不能再作修改,也不能重複宣告,且永遠存在。

變數宣告

語法:

var myFirstName = 'Nancy';
let myLastName = 'Lin';
const myFullName = 'Nancy Lin';

語法說明:

  • 變數宣告:用 varletconst 等關鍵字,依需求來宣告一個變數或常數。
  • 變數名:隨意自訂,但有命名規則須遵循(規則在下方)。
  • 賦值:用等號 = (賦值運算子)來賦予一個值給變數,值可以是任何型別(如:字串、數字、布林等)。而 = 並非數學中的等於相等,而是賦予指定的意思。
  • 分號:最後使用 ; 結束整個語句。

變數命名規則:

  • 第一個字元,絕對不可使用數字 0-9
  • 可包含大小寫英文字母、數字、底線 _、錢字符號 $,但不可有其他標點符號、特殊字元或空白。
  • 注意大小寫,因為寫錯會被視為不同的變數(如:xX 兩個是不一樣的變數名)。
  • 儘量用有語意的英文字當開頭,且以小駝峰寫法命名(如:myFirstNamesomeObject)。
  • 不能使用到保留字或關鍵字,以免程式判斷錯誤。

參考資料:


上一篇:【JS幼幼班】Step.03 JavaScript 的基本概念
下一篇:【JS幼幼班】Step.05 基本語法:型別(空值、boolean、number)


#javascript #JS幼幼班 #learningJS #JS基本語法







Related Posts

【JS幼幼班】Step.06 基本語法:基本型別(string、symbol)

【JS幼幼班】Step.06 基本語法:基本型別(string、symbol)

SQL  bitwise operator

SQL bitwise operator

陣列原型方法:map()、find()、filter()、some()、every()、sort()

陣列原型方法:map()、find()、filter()、some()、every()、sort()


Comments