基礎
基礎邏輯運算
and &&
or ||
not !
除了true 跟 false 數字也可使用邏輯運算;
短路 : 遇到true就先回傳true ex: false || 10 回傳10 3||10 回傳3, 3 && 10 回傳 10 false || true 回傳 false
在JS裡 0, no, false, 控制串 會被當成假的值。
位元運算
往左移一位 : x2
往右移一位 : /2
ex : 0100 (4) 往左移一位 1000 (8)
跟直接x2 /2 效能更加
位元運算的 and (&) or (|) xor(^ 兩個一樣回傳 0 兩個不一樣回傳 1) not (~ 變二進會後的每個數字都反轉):
1010
and 1111
--------
1010
任何數字 &1 的結果不是1 (最後一位元是1) 就是 0 (最後一位元是0)
=> 可做為一個 位元遮罩
ex : 任何數字 & 8 (1000) 在第四個位元為1時 -> 1; 第四個位元為0時 -> 0
也因此也可以利用and來判斷是否為奇數或偶數 (第一個位元為0或1)
變數 Variable
var : 類似一個裝東西的盒子
變數不能用數字開頭,某些特殊符號或程式會用的名稱
若要打長串 可用 底線_ (this_is_a_box)或 駝峰式(單字開頭大寫 thisIsABox) 統一用一種就好
++
a = a + 5 <=> a += 5 (- * / 一樣)
a++ (-- 加一減一) ++a
a++ 會先執行完那行程式再執行 a = a + 1
++a 先執行 a = a + 1 再執行 該行程式
ex :
var a = 0
console.log(a++ && 30) => 0
console.log(++a && 30) => 30
變數型態
primitive : boolean, number, string
object, undefined, function
**null 是 object (一開始設計就是這樣了)
typeof
Array 陣列
如果variable是一個箱子的話 array就是好幾個差不多類型的箱子
array_name = [index[0], index[1], index[2]]
# 陣列用中誇號 [] &逗號 , 分隔 index : 索引,從 0 開始
array_name.length : 計算陣列長度
array_name.push : 加入值放入陣列
Object 物件
大括號
var student =[]
var peter =
{
#key : value
name : 'peter',
score = [1, 2, 3],
address : 'taipei city'
phone : '0912121212'
father : {
name: "nick"
phone: "1234"
}
.push 可將 object 加至 array
student.push(peter)
console.log(student[0].name)
peter['name']
ex:
var key = 'name'
console.log(peter[key]) <----這邊有疑問
變數運算
var a = 10
var b = "20"
console.log(a+b) --->印出字串 "1020"
console.log(number(a) + parseInt(b, 10)) #此處的10為10進位的意思
*浮點數誤差
var a = 0.1 + 0.2
conssole.log(a) ----> 0.30000000000004
console.log(a == 0.3) ----> false
[浮點數誤差](https://medium.com/starbugs/see-why-floating-point-error-can-not-be-avoided-from-ieee-754-809720b32175)
== 與 ===
= : 賦值
== : 判斷是否相等
=== : 判斷是否相等還會比較兩邊型態 (ex:數字 or 字串) 推薦使用
從Object 的等號真正理解變數
console.log( [] === []) ----> false
console.log([1] === [1]) ----> false
console.log({} === {}) ----> false
console.log({a: 1} === {a:1}) ----> false
obj內存的是記憶體的位置