變數

型態

  • 字串 string
  • 數字 number
  • 物件 object
  • 陣列 array is a object
  • 布林 boolean

宣告

常見變數命名規則

使用 小駝峰式 來命名變數。

字串

var str1 = "Hello";
var str2 = 'World';

字串串接

str1 + str2 // HelloWorld
str1 + ' ' + str2 // Hello World

數字

var num = 1;

四則運算

1 + 1 // 2
1 - 1 // 0
2 * 2 // 4
2 / 2 // 1
10 % 7 // 3 餘數

數字與文字相加?

"1" + 1 // "11"
"a" + 1 // NaN
parseInt("1") + 1 // 2
+"1" + 1 // 2

陣列

var arr = [1, 2, 3, 4, 5];
arr[0] // 1

陣列索引 (index) 從 0 開始

物件

var member = {
    name: 'Iiinto',
    age: 18,
    "not good": true
};

使用

使用 . 來取得屬性

member.name

取得有空白的屬性

member['not good']

不建議使用有空白的屬性


生命週期 Scope

宣告變數等同於將資料放入記憶體位置,所以當資料被拿出記憶體後,等同於不存在。

var x = 1;

function processX() {
    var x = 2;
    console.log("x in processX: " + x); // Q1
}

function globalX() {
    x = 3;
    console.log("x in globalX: " + x); // Q3
}

processX();
console.log(x); // Q2

globalX();
console.log(x); // Q4

function makeY() {
    var y = 99;
    console.log(y in makeY: " + y); // Q5
}

makeY();
console.log(y); // Q6

執行流程

  1. 宣告變數 x 為 1
  2. 將 x = 1 放入記憶體位置 0x01
  3. 宣告 function processX
  4. 不執行,將 processX 放入記憶體位置 0x02
  5. 宣告 function globalX
  6. 不執行,將 globalX 放入記憶體位置 0x03
  7. 呼叫 processX
  8. processX 內的 var x = 2 放入記憶體位置 0x04
  9. 取得 0x04 的 x,得到 2 (Q1)
  10. 結束 processX,釋放因 processX 產生佔用的記憶體位置 0x04
  11. 取得 0x01 的 x,得到 1 (Q1)
  12. 呼叫 globalX
  13. globalX 內的 x = 3 為全域變數,寫入 0x01 的 x = 3
  14. 取得 0x01 的 x ,得到 3 (Q3)
  15. 結束 globalX
  16. 取得 0x01 的 x ,得到 3 (Q4)
  17. 宣告 function makeY
  18. 不執行,將 makeY 放入記憶體位置 0x04
  19. 呼叫 makeY
  20. makeY 內的 var y = 99 放入記憶體位置 0x05
  21. 取得 0x05 的 y ,得到 99 (Q5)
  22. 結束 makeY,釋放因 makeY 產生佔用的記憶體位置 0x05
  23. 無法取得 y 位置,得到 defined (Q6)