變數
JavaScript 變數可分成 local 和 global 兩類。 local scope 變數會跟隨著 function 的生命週期,而 global 變數則會一直存在。 由於使用全域變數,一個不小心就容易發生覆蓋問題,所以要盡量減少全域變數的使用。
使用 var 宣告變數
在 JavaScript 中要宣告變數,可以使用 var 來宣告。 使用 var 宣告的變數,如果在函式外則為全域變數,如果在函式內則為區域變數。
var a = 3; function func() { var x = 4; y = 5; myOutput(a); //3 myOutput(x+y); //9 } func(); myOutput(typeof x); //undefined myOutput(typeof y); //number , 沒有使用 var 宣告的變數,隱含為全域
其實在 JavaScript 中,並沒有強制一定要使用 var 來宣告變數,若不使用 var 宣告變數,則隱含為全域變數,而且與 var 宣告的變數最大的差別在於它可以被刪除。 這是因為不使用 var 宣告的變數並不是真正的變數,而是全域物件的屬性,所以才可以透過 delete 運算子刪除。
delete a; delete y; myOutput(typeof a); //number , 透過 var 宣告的變數無法刪除 myOutput(typeof y); //undefined , 因為 y 被 delete 了
變數的 hoisting 行為
在 JavaScript 中有一個特性,稱為 Hoisting ,也就是程式會將 function 中全部需要宣告的 Local Variable ,不管 var 的敘述在什麼位置,都會被提升到 function 的第一行來執行。 如下面這個例子,程式碼中的的第5行,一般我們預期的結果應該是 vito ,但是,就是因為 hoisting 的關係,區域變數覆蓋了全域變數,所以結果才會變成 undefined。
var myname = "vito"; alert(myname); //vito function func() { alert(myname); //undefined var myname = "shao"; alert(myname); //shao, 區域的 myname 變數 } func(); alert(myname); //vito, 全域的 myname 變數
上面例子實際上等同下面例子,這樣就可以理解為什麼了。
var myname = "vito"; alert(myname); //vito function func() { var myname; alert(myname); //undefined myname = "shao"; alert(myname); //shao, 區域的 myname 變數 } func(); alert(myname); //vito, 全域的 myname 變數
資料型態
在 JavaScript 中,只提供 string, number, boolean, null, undefined 五種基本型別,其餘的資料型態都屬於 Object 。
字串
布林
數值
陣列
日期
正規表示式物件 RegExp
JavaScript 的正規表示式也是一個物件,用來描述字元的樣式。 依據指定的樣式,你可以對一個字串進行樣式比對,或者取代的操作。 要建立 JavaScript 正規表示式有二種建立方法:使用實字,或者使用 new RegExp 建構式。
樣式與修飾詞
RegExp 由二個元素組成:
樣式(Pattern)
樣式是用來設定比對的原則,你可以使用以下規則組成比對樣式:
使用小括弧用於子樣式,中括弧可指定特定範圍的字元
(a | e | i | o | u) | a 、 e 、 i 、 o 、 u 中任一字元 |
0-9] | 0 到 9 的數字 |
[a-z] | 所有小寫英文字母 |
[A-Z] | 所有大寫英文字母 |
A-z] | 所有英文字母,無論大小寫 |
中介字元都是單一字元,除了小數點符號外,均以反斜線開始,如下
. | 任何字元,除了新行或結束符號 |
\w | 任何文字字元 |
\W | 任何非文字字元 |
\d | 任何數字 |
\D | 任何非數字 |
\s | 任何空白字元 |
\S | 任何非空白字元 |
\b | 英文單字開頭 |
\B | 非英文單字開頭 |
\0 | NULL 字元 |
\n | 新行符號 |
\f | 換頁符號 |
\r | 輸入鍵符號 |
\t | 水平 |
\v | 垂直 tab 符號 |
\000 | 八進位數字 |
\x00 | 十六進位數字 |
\u0000 | Unicode 字元 |
量詞標記在字元之後,表示數量
+ | 表示 1 到無數個 |
* | 表示 0 到無數個 |
? | 表示 1 或 1 個 |
{1} | 表示 1 個 |
{1, 2} | 表示 1 到 2 個 |
{1,} | 表示 1 到無數個 |
開頭與結尾的指定符號
$ | 若出現在字串結尾,表示其字元必須是字串結尾的字元 |
^ | 若出現在字串開頭,表示其字元必須是字串開頭的字元 |
修飾詞(Modifiers)
修飾詞屬於額外的比對原則,包括底下幾種標記符號:
名稱 | 說明 |
---|---|
i | 不區分大小寫 |
g | 傳回所有符合的結果 |
m | 多行筆對 |
使用 new RegExp 建構式
語法
var patt = new RegExp(pattern,modifiers);
var rege = new RegExp("[a-z]+", "g"); var data = "AbC 302 c12"; var result = data.match(rege); // b, c
使用實字
語法
var patt = /pattern/modifiers;
var rege = /[a-z]+/ig; var data = "AbC 302 c12"; var result = data.match(rege); // AbC, c
運算子
JavaScript 運算子有以下幾種類:
沒有留言:
張貼留言