2019年12月25日 星期三

JS學習:變數的宣告與使用



所有資料都是物件

資料型別分成:基本資料型別、複雜資料型別

基本資料型別 ( primitive data type ):為語言的基本構成單元,Boolean、int、Number、String 等

複雜資料型別 ( complex data type ):通常由基本資料型別構成,Array、Function 等

變數命名

  1. 盡量使用有含意的英文單字
  2. 使用小駝峰命名 ( ex: maxWidth )
  3. 命名符合 最短長度、最富意義 原則
  4. 避免出現數字編號 ( ex: id_1、id_2 )

變數的本質

每個物件在建立時,會向記憶體請求一塊空間來儲存資料,而我們宣告的變數會持有引用
( Reference ),引用則是指向該物件所在的記憶體位置


實質型別和引用型別

實質型別是直接存取值;引用型別則是儲存引用

簡單來說 如果存取的資料是 「基本資料型別」那麼它就是「實質型別」,反之則是 「引用型別」

引用型別變數儲存的是引用 ( Reference ),因此只要修改資料,所有存取相同引用、指向同一個資料的變數,都會跟著異動

實質型別變數儲存的是實際的值 ( Value ) ,因此變數彼此之間互不干擾


不變物件 ( immutable object )

前面提到了所有資料都是物件,所以即使是實質型別變數,儲存的仍然是引用,但是是特殊物件,稱之為「不變物件 ( immutable object ) 」,導致實質型別變數的使用方式不太一樣

不變物件,也就是一但被建立起來,就不能再被更改

所以當發現指向不變物件的引用想要更改值的話,會另外建立一個新的不變物件來接收新的值,並更新引用
而舊的不變物件如果不再被使用,則會被自動回收

這種不變物件可以減少記憶體的消耗,因為變數存取的是引用而非值,因此當有很多個實質型別變數的值都是「100」,那實際上只會有一個值為「100」的不變物件被建立


const 常數

常數,也就是恆定不變的數值,只能在宣告的時候賦值,而且一經賦值就不能再更改,只要確認一個變數的值不該被改變,就應該將它設成常數

對於實質型別變數而言,常數持有的就是值
對於引用型別變數而言,常數值有的是引用,因此只能保證該引用不會更動,並不保障引用物件本身的值不會異動

沒有留言:

張貼留言

JS學習:函數進階使用技巧

代理函數物件 根據不同的條件,代理函數物件可以指向不同的函數來實現動態改變,如下: function femaleFunction() { console.log('female'); } function maleFunction() { ...