六角學院 JS 核心筆記 (十六)【運算子、型別與文法】- 寬鬆相等、嚴格相等以及隱含轉型
JavaScript 是弱型別的語言,容忍隱性的型別轉換,因此允許不同型別之間的比對 (包含 =
、>
、<
)。
寬鬆相等 ==
比對兩者型別轉換後的值、嚴格相等 ===
比對兩者的型別和值。
JavaScript 是弱型別的語言,容忍隱性的型別轉換,因此允許不同型別之間的比對 (包含 =
、>
、<
)。
寬鬆相等 ==
比對兩者型別轉換後的值、嚴格相等 ===
比對兩者的型別和值。
Primitive type 和 Reference type 都是 call by value。不一樣的是儲存的東西。結束!
有人會說 Reference type 是 call by reference 或 call by sharing (這個比較符合我的意思和理解)。但是請先去看這篇:值 (value)、指標 (pointer/address)、參考 (reference)。
優先性 Operator precedence:決定運算子運算或是說被語法解析的優先順序。
相依性 Associativity:當優先序相同時,使用相依性決定運算方向。
小學一定都學過最簡單的優先性和相依性概念:先乘除後加減。
所謂的運算子就是運算符號,運算子和 Expression 表達式有密不可分的關係。運算元就是運算子旁邊被拿來運算的東西,例:數字、變數等。
前面的單元有提到 Expression 表達式主要透過符號做一些運算,然後回傳結果。可以去這邊複習:六角學院 JS 核心筆記 (十)【運算子、型別與文法】- 陳述式與表達式
JavaScript 的型別主要分兩大類別,分別是原始型別 (Primitive type) 及參考型別 (Reference type)。
JavaScript 是動態型別、弱型別的語言。
所謂的動態語言,就是在執行的時候,變數才會依照賦予值的型別,來決定變數的型別。因此變數的型別是可以不斷改變的。
而弱型別則是,偏向容忍隱性的型別轉換,但是怎麼轉換是它自己決定。
詳情可以參考之前寫過的這篇:靜態語言 / 動態語言、強型別 / 弱型別、静態作用域 / 動態作用域。以下僅重點提到一些需要注意的觀念。
ASI 即 Automatic Semicolon Insertion,當程式碼沒有加上分號時,依照 ASI 的規則,自動插入分號。它會帶來一些好處,但是也會造成一些問題。
Statement 陳述式:主要在陳述一些命令,做一些事情,但是不回傳結果。
Expression 表達式:主要透過符號做一些運算,然後回傳結果。
如果對執行緒的基本概念不太了解的話,可以參考電腦的核心 (Core) 和執行緒 (Thread)。
這邊還有兩個我很討厭的名詞:同步 (Synchronous) 和非同步 (Asynchronous)。因為中文的翻譯超容易誤解。同步有循序、依序的意思。非同步有同時的意思。
電腦科學中小數點如果採用 IEEE754 二進制浮點運算都有同樣的狀況,會出現精度丟失的問題。