# 變數 var | 符號 | 功能 | 例子 | | ---- | ------------------ | ------------------ | | = | 賦值 | var a = 2 | | == | 等於 | 2 + 3 == 5 > true | | !== | 不等於 | 2 * 2 !== 3 > true | | === | 等於(含型態相等) | 3 === '3' > false | - 為了避免奇怪的 Bug ,判斷等式時盡量使用 === ### 變數的命名,基本上有兩種流派。 - var this_is_a_book (底線派) - var thisIsABook (駝峰派) - 不可以數字、保留字(程式本身有的命名)、特殊符號,例如:123w、for、int、! 等等。 `var 變數名稱 = 變數內容` ### 變數命名 - 記得培養好好命名的習慣,如果每個變數都只叫 a 或 b ,事後回來看會很難辨別,連自己都搞不清楚。 - 變數名稱大小寫有差別 - 不能用數字開頭,保留字和特殊符號也盡量避免 - undefine 代表有宣告變數,但沒有內容; not define 代表該變數沒有被宣告過。 以下範例 ``` var a = 0 a = a + 5 console.log(a) => 5 ``` `a = a + 5` 可以簡化為 `a += 5` 那 `a += 1` 有其他寫法嗎? 可以寫成 `a++` 有 `a++` 就有 `a--` 那可以寫成 `++a` 嗎? - 不行,他們是不同意思 先後順序的差異,不要搞混了 ``` var a = 0 console.log(a++ && 20) => 0 // false //先執行 console.log(a && 20) 再 a+=1 var a = 0 console.log(++a && 20) => 20 //先執行 a+=1 再 console.log(a && 20) ``` 前者可以想成 ``` console.log(a && 20) a+=1 ``` 後者可以想成 ``` a+=1 console.log(a && 20) ``` - 指派運算子 | 符號 | 例子 | 實際上在做什麼 | | ---- | ------- | -------------- | | += | a += b | a = a + b | | -= | a -= b | a = a - b | | * = | a * = b | a = a * b | | /= | a /= b | a = a / b | | %= | a %= b | a = a % b | | ++ | a++ | a = a + 1 | | -- | a-- | a = a - 1 | 另外 ++a 也代表 a += 1 , --a 也代表 a -= 1 。放前後的差別如下: ``` var a = 0; console.log(a++ && 30); // false console.log(a); // 1 ``` 上面例子中, console.log(a++ && 30) 可以解讀成 console.log(a && 30) 然後再 a+=1。 ``` var a = 0; console.log(++a && 30); //先執行 a+=1 再 console.log(a && 30) // true console.log(a); // 1 ``` 通常一句話中只會有一個 a++ 或 a-- ,才不會有判斷先後順序的問題。 ### 變數型態 - 輸入 type (變數名稱) 可以得到變數的型態,型態可以分為以下幾種: ![圖片](https://static.coderbridge.com/img/verakang/48649ef39e6941388e88ea0ade41a66f.png) | ### 變數型態 part2 | 型態 | 例子 | | -------- | ---------------------- | | boolean | true, false | | number | 1, 2, 999, -0.5 | | string | '字串', '100', 'hello' | | undefine | undefine | | function | 所有 function | - Primitive Booling Number String - Other undefined function object null === object ``` var student = []; var peter = { name: 'peter', address: 'taipei', phone: '01877754' } //name, address, phone 皆為索引值 student.push(peter); //把此 object 加入到 student 陣列裡 console.log(typeof peter); //object console.log(student[0]); //顯示第 0 位學生的資料 console.log(student[0].name); //顯示第 0 位學生的 name console.log(peter.name); //指定學生的名字 console.log(peter['name']); //同上,差別在此 [] 裡的內容可替換成別的變數 //例如 var key = 'name'; console.log(peter.key); //undefined console.log(peter[key]); //peter //此外物件裡也可以放陣列或再一個物件,甚至 function var peter = { name: 'peter', scores: [80, 50, 45], phone: '01877754', father: { name: 'georgie', phone: '7804444' } } console.log(peter['scores']); //peter 的分數 console.log(peter.father.name); console.log(peter['father']['name']); //爸爸的名字 ``` ## 變數運算注意 型態 相同都是數字型態的變數才能相加,不然結果就只會合體 ``` var a = 30; var b = '20'; var c = 20; ``` ``` console.log(a + b); //3020 console.log(a + c); //50 可以使用一些函數將其轉換成數字: console.log(a + Number(b)); console.log(a + parseInt(b, 10)); //皆可轉成數字型態 parseInt(string, radix); //radix 回傳值表示此數的進位法 parseInt(b, 10); //20 parseInt(b, 2); //4 =>(2*2^1) ``` 變數型態part2 ``` 字串 + 字串,會將字串拼接起來。例如 'hello' + 'world' > 'helloworld'。 數字 + 字串,會將數字轉成字串接起來。例如 10 + '20' > '1020'。 浮點數誤差。因為 JavaScript 儲存小數時並不精準,可能 0.2 其實是 0.2000000004 ,因此小數相加要用其他方法。例如 0.2 + 0.3 === 0.5 > false ```