負責人:黃丰嘉
授課時間:2019-09-15 (日)
ECMAScript standard
。版本 | 正式名稱 | 備註 |
---|---|---|
1 | ECMAScript 1 (1997) | First Edition. |
3 | ECMAScript 3 (1999) | 廣泛支援 (2000 - 2010) |
5 | ECMAScript 5 (2009) | JS ES5 |
6 | ECMAScript 2015 | JS ES6 添加let 、const 、可以預設參數的值 |
8 | ECMAScript 2017 | 添加 Object |
9 | ECMAScript 2018 | 最新版 |
本節介紹JavaScript中,值(Value)的型別(types)和運算子(operators)。
JavaScript 是個「弱型別」的語言。
ES5標準,JavaScript 內建型別:
ES6 之後多了新的型別:Symbol
JavaScript 使用固定的 64 bits 來儲存數值。
值 (分數/尾數) | 指數 (表示次方數) | 正負號 |
---|---|---|
52 bits (0 - 51) | 11 bits (52 - 62) | 1 bit (63) |
不管整數或帶有小數點的數字,還是科學記號表示都是。
除了常見的數字外,還有3種特殊的數字。
Infinity
:正無限大。
-Infinity
:負無限大。
NaN
:不是數值(not a number),儘管它是 number type 的一種值(value)。
NaN 與任何數字作數學運算,結果都是 NaN。
NaN 並不等於任何的數字,甚至是自己。NaN === NaN; // false
運算子 (Operators):+
、-
、*
、/
、%
運算順序:
()
,先運算*
除/
或取餘數%
,後加+
減-
使用""
(雙引號)、''
(單引號)或 `
,將字串包起來。
多行字串,可透過\
(反斜線)繼續。但\
後面不能有任何東西,包括空白字元。
倘若要在單引號內包覆單引號,或是雙引號內包覆雙引號就會出現問題。
console.log('Let's go!'); //SyntaxError
console.log("Let's go!");
\
(跳脫字元, escape character)處理 console.log('Let\'s go!');
樣板字面值(Template literal):
外部:由` `
包裹。
內部:由$
及{}
構成佔位符(${expression}
),允許字串嵌入運算式並返回運算結果。
運算子 (Operators):+
console.log("con" + "cat" + "e" + "nate"); //concatenate
布林值的值只有兩種:true 和 false,通常用於判斷式,作為控制程式流程的用途。
比較運算子:>
、<
、>=
、<=
、==
、!=
、===
、!==
字串比大小:
"a"
> 大寫字母"Z"
> 非字母的字元("!"
, "-"
…)嚴格相等(===
) vs. 一般相等(==
)
===
(或稱 "三等於"、"全等"):
不會
將型別一致化後比較(若型別不同,就回傳 fasle)。==
(或稱 "雙等於"):
邏輯運算子:&&
(and)、||
(or)、!
(not)
Unary operators (一元運算子):只需要單個運算元,即可完成運算。
typeof
運算子,用於判斷型別種類。Binary operators (二元運算子):需要兩個運算元,才可完成運算。
ternary operator (三元運算子):需要三個運算元,才可完成運算。
語法:condition ? exprIfTrue : exprIfFalse
當條件符合,回傳中間的值(exprIfTrue),反之回傳右邊的值(exprIfFalse)。
Denote the absence of a meaningful value. They are themselves values, but they carry no information.
Two special values:
undefined
(未定義)
console.log(typeof undefined); //undefined
Boolean(undefined) //false
null
(沒有值)
console.log(typeof null); //object
Boolean(null) //false
當運算元的型別不同時,JavaScript 會自動依規則 type coercion (強制轉型)並運算。
Three-character comparison operators
===
:嚴格相等
!==
:嚴格不相等
Such values are created by typing in their name (true, null) or value (13, "abc").
+
, -
, *
, /
, %
)+
)==
, !=
, ===
, !==
, <
, >
, <=
, >=
)&&
, ||
)-
to negate a number!
to negate logicallytypeof
to find a value’s type)?:
) to pick one of two values based on a third value.本節將學習JavaScript的語法結構。
JavaScript是以
;
來判斷一段程式碼的結束。
有無縮排,在JavaScript並不影響。建議還是縮排,因為方便閱讀程式碼區塊。
Expression
(運算式)
不完整
程式碼片段。!false
、"SIRLA"
、-( 2+3 )
相當於一個句子的某部分片段。
Statement
(敘述句)
完整
的程式碼,執行某個動作。console.log( -( 2+3 ) );
相當於一個完整的句子。
用以方便抓取或是儲存值(value)。
「弱型別」的JavaScript,變數本身不帶有資料型別的資訊,變數只用來作為取得值或物件的
參考
。
在執行時期,透過變數來參考
至物件或值,才會得知此變數有什麼操作方法。
用於宣告變數的保留字(keyword)
let
宣告區域變數。
當參考到未給值的變數時,將得到undefined
。
var
(short for “variable”)
var
。const
(constant)
最常使用。
宣告常數,不能再作修改。
一經宣告,就永遠存在。
駝峰式命名:
FuzzyLittleTurtle
、fuzzyLittleTurtle
。
JavaScript 區分大小寫。
$
、_
,但不可有其他標點符號、特殊字元或空白(space)。
fuzzy_little_turtle
保留字
(keywords)。
當你用保留字
命名時,會出現syntax error。
//
/* */
console.log
函式於瀏覽器的控制台 (console)。
Windows 請按 F12
Mac 請按 command-option-I
直線型的流程:
條件型的流程:
if
if ... else ...
if ... else if ... else ...
迴圈型(loop)的流程:
while
符合條件後才做
do ... while
先做再說
for
num = num + 2
相當於num += 2
counter = counter + 1
相當於counter += 1
相當於counter ++
break
:跳出迴圈。
以下範例程式碼的for迴圈內,缺少終止條件的檢查。
代表此迴圈將永不停止(無限迴圈),除非break statement
被執行。
continue
:跳出loop body
,但仍在迴圈內繼續跑。
分派型(dispatch)的流程:
switch
若case敘述內缺少
break
,switch將持續執行至含有break
的case才停止。
本節將學習JavaScript函式的語法。
物件(Object)
的一種。函式的名稱 (也可能沒有名稱)
( )
中的部分,稱為「參數」。若有多個參數,則用,
隔開。
{ }
內的部分,放需要重複執行的運算。
定義函式 (3種方式)
透過
return
回傳結果。若無,則預設會回傳 undefined。
函式宣告
函式運算式
匿名函式
無參數
有參數
若有兩個以上的參數,則用
,
隔開。
箭頭函式
當箭頭函式無參數時,()
仍保留。
在函式定義中,設定參數預設值
呼叫函式
因為JavaScript在編譯階段,自動將變數和函式定義先放入記憶體,
再去執行函式呼叫。
若多給參數,則JavaScript會自動忽略多餘的參數,執行時不會出問題。
若少給參數,則預設缺少參數的值為undefined,執行時會出問題。
變數作用的範圍,分為:
任何地方
使用。
全域變數:
var
區塊內
使用。
區域變數:
let
、const
巢狀結構:
函式區塊內,再包裹函式。
外部函式區塊內的參數,可作用於內部函式。
狗跟貓的計數函式,輸出結果混在一起了
讓狗的計數函式只計算狗的,貓的計數函式只計算貓的。
讓變數保留在該函式中而不會被外在環境干擾。
進一步簡化程式,直接 return function
甚至運用同一個 dogHouse
時,變數間也都是獨立的執行環境不會干擾。
函式內不斷呼叫自己本身。
缺點:
Declare g to be a function
Define f to hold a function value
A less verbose function value
var
let
、const
Minimum
Recursion
Bean counting