JavaScript
基本運算
邏輯運算
短路特性
位元運算
位移運算
object
array
在程式碼中打進 debugger
然後放進 chrome 的 developer tool 裡面,程式就會停在 debugger
那一行,然後就可以在 source 裡一行一行檢視。
另外如果我們在 souces 裡點一下數字就可以設下中斷點,也可以幫助debug。
// 參考《你所不知道的JS:導讀,型別與文法》
語法 | 用途 |
---|---|
console.log(b) | 在控制台 log 進資料(可印出內容) |
log(b)
是一個 call function
- 把 b 這個變數的值交給被 call 的 funcion(在這裡是log
)
- 也就是這裡是 log (取) b 這個變數的值的意思
console.
是一個 object reference(物件參考),參考到 log(..)
所在的物件。
- 其中,.
是一個運算子
- 也用來進行物件特性(object properties)的存取
// 參考《你所不知道的JS:導讀,型別與文法》
運算子分為以下幾類:
=
+
, -
,*
,/
,%
+=
, -=
, etc.++
, --
.
==
, ===
,!=
,!==
<
, >
,<=
, >=
&&
(and) , \\
(or), !
(not)// 參考《你所不知道的JS:導讀,型別與文法》
//參考Type coercion
Number(value)
語法 | 用途 | 用例 | 注意點 |
---|---|---|---|
+ | 加號 | 1 + 2 // 3 | 前後空格 |
- | 減號 | 3 - 2 // 1 | 前後空格 |
* | 乘號 | 2 * 3 // 6 | 前後空格 |
/ | 除號 | 4 / 2 // 2 | 前後空格 |
% | 取餘數 | 10 % 3 // 1 | 前後空格 |
++ | 遞增 | i++ | eslint 不接受 i++ 會先跑完整句才加, ++i 會先加完再跑整句 |
– | 遞減 | i++ | eslint 不接受 i– 會先跑完整句才減, –i 會先減完再跑整句 |
語法 | 用途 | 用例 |
---|---|---|
pipe * 2 | or | ture pipe * 2 false // ture * 這裡不支援pipe 符號 |
&& | and | ture && false // false |
! | not | !ture // false !false // ture |
A | B | A && B | A or B | !A |
---|---|---|---|---|
ture | ture | ture | ture | false |
ture | false | false | ture | fals |
false | ture | false | ture | ture |
false | false | false | false | ture |
輸入 | 回傳 | 解釋 |
---|---|---|
3 or 10 | 3 | 在跑到 3 時已確定是 ture,所以直接回傳 3 |
false or 10 | 10 | 跑到 10 才確認是 ture,所以回傳 10 |
0 or false | 10 | 0 可以就當作是 false |
3 && 10 | 10 | 在跑到 10 時才確定是 ture,所以回傳 10 |
false && 10 | false | 跑到 false 就確定是 false 所以回傳 false |
小筆記
//可以直接在 CLI 輸入 node 寫程式
<<
和 >>
把用二進制系統儲存的數據整個往左或往右移一位
輸入 | 輸出 |
---|---|
10 << 1 | 20 |
1 << 10 | 1024 |
>>
一位其實會使數據乘以 2<<
,則會除以2(有小數的部分會被消失不會進位)在 JavaScript 中
語法 | 用途 | 輸入 | 輸出 | 二進位 |
---|---|---|---|---|
& | and | 10&15 | 10 | 1010 & 1111 == 1010 |
pipe | or | 10 or 15 | 15 | 1010 & 1111== 1111 |
^ | xor | 2 ^ 4 | 6 | 1010 & 1111 == 0101 |
! | not | !15 | -16 | …00001111 …1111110000 |
輸入 | 輸出 | 理由 | 推論 |
---|---|---|---|
A & 1 | 0 | A 的最後一個位元是 0 | A 是偶數 |
A & 1 | 1 | A 的最後一個位元是 1 | A 是奇數 |
statement | 用法 | 說明 |
---|---|---|
var | 宣告變數 | ES5以前的舊用法會有覆蓋和洩漏的問題 |
let | 宣告變數 | ES6之後的語法 |
const | 宣告常數 | 建議命名全大寫 宣告之後就不會再被重新賦值 |
如果宣告變數之後沒有賦值,變數就數會是 undefine
如果 log 的對象沒有被宣告,就會出現 Not define 警告
變數命名
型態
查看型態
typeOf
console.log(typeOf "32") // string
a computed value(複合值)
持有一些 properties(特性;具名的位置)
格式:
obj.property
運算子存取 propertyobj[property]
存取 property語法 | 說明 |
---|---|
.length | 陣列長度 |
.push | 把 value 放到陣列最後一項 |
注意 type 問題
number + string
時,number
會被 coerce 成 string
可以用兩種內建 function 強制把srtring
轉型成 number
浮點數誤差
// 參考《你所不知道的JS:導讀,型別與文法》
JS 的 4 個 equality operators:
符號 | 說明 |
---|---|
== |
允許 implicit coercion 的相等性檢查 |
=== |
不允許 implicit coercion 的相等性檢查 |
!= |
允許 implicit coercion 的不等性檢查 |
!== |
不允許 implicit coercion 的相等性檢查 |
//Equality comparisons and sameness
// ES5 規格第11.9.3節相關implicit coercion 轉換優先順序 :
The Abstract Equality Comparison Algorithm
The comparison x == y, where x and y are values, produces true or false. Such a comparison is performed as follows:
syntax:
syntax:
syntax:
範例:
syntax:
例如:
// 部分參考《你所不知道的JS:導讀,型別與文法》
()
console.log(functionName())
這裡的 arr
就是 parameter (參數), [1, 2, 3], function(x)
就是 arguments (引數)
console.log(arguments[0])
來 log 出第 0 個argument// 待補
// 待補
=
來重新賦值才會被存下來