JavaScript概論(1)

JavaScript 概論

JavaScript的基本規則,形態上的差異等等,學習心得整理。

簡介

JavaScript 是多數瀏覽器都有實作的物件導向程式,世界大多數的網站也都有使用,是直譯語言,Script範圍內執行錯誤,該行以下的程式不會被執行,屬於弱型別的程式語言,在網頁上提供邏輯判斷、網頁標籤控制等等功能是前端程式設計不可或缺的語言。

JavaScript資料型態基礎

 

分號(;)

在JavaScript中分號是非必要的,但是若是使用錯誤也會造成程式的執行和撰寫者想的不一樣的狀況。

例如:

var a

a

=

3

console.log(a)

程式解析後會變成var a; a = 3; console.log(a);

javascript會將var a a解析成var a;a=3不會變成var aa=3

var y=x+f

(a+b).tostring()

程式解析後會變成var y=x+f(a+b).tostring();

在此例子中可以看到javascript會將var y=x+f (a+b).tostring()解析成var y=x+f(a+b).tostring();而不是var y=x+f;(a+b).tostring();

return

true;

程式解析後會變成return;true;

這是因為javascript中return、break、continue遇到換行字元(\n)會視同分號(;)

x

++

y

程式解析後會變成x;++y;

Javascript中++、–若沒有明確斷句會被視為開頭

 

 

型態

數值

overflow狀況會產生Infinity(無限)值

例如:

正數/0=Infinity

underflow狀況會產生-Infinity(-無限)值

例如:

負數/0=-Infinity

運算結果小於最小可顯示的範圍時會回傳0,若此狀況為負數javascript會回傳[負零]狀態,這個值幾乎與0沒有區別且在javascript中0會完全等於-0

例如:

Var a = 1/0,b=1/a,c=-1/a;

上例子執行結果b和c都會回傳0

a = 0;

b = -0;

alert(a===b);

上例子回傳結果為true

以下為幾個例子為javascript會回傳的狀態

0/0=NaN

Infinity/Infinity=NaN

-Infinity/Infinity=NaN

Math.pow(負數,1/2)=NaN

ECMAScript3 NaN和Infinity可讀寫

ECMAScript5 NaN和Infinity只能讀

Javascript也有判斷NaN和Finite的函式isNaN()和 isFinite()

isNaN()已有在引數等於NaN時回傳true,isFinite()則是當引數不等於NaN或Infinity或-Infinity的時候會回傳true

小數方面javascript和其他語言一樣是使用2進位計算小數,所以二進位無法除盡的小數會造成誤判

例如:

var x=0.3-0.2;                                  //0.09999999999998

var y=0.2-0.1;                                  //0.1

console.log(x==y);                       //false

console.log (x==0.1);                      //false

console.log (y==0.1);                      //true

由以上結果可以發現0.3轉為2進位時會變成無限循環小數(0.010011001…無限循環),所以javascript在計算的過程中0.3-0.2會變成趨近於0.1但是並不會等於0.1這樣有可能在判斷式中出現錯誤。

Date

Javascript中也包含了日期的物件Date,Date的物件也包含了API,Date並不算是javascript基本的資料型態(他算是物件的延伸),以下介紹Date的一些使用方法。

later=new Date(2010,10,1,17,10,30);

//later為日期2010年11月1日17點10分30秒

now=new Date();

//now為目前的日期和時間

now-later;

//現在日期時間和2010年11月1日17點10分30秒差多少微秒(ms)

later.getUTCHours();

//會回傳9,因為UTC的時間 = 設定時間(17) – 時差(8)[台北+8]

later.toString();

//Mon Nov 01 2010 17:10:30 GMT+0800 (台北標準時間)

later.toUTCString();

//Mon, 01 Nov 2010 09:10:30 GMT

later.toLocaleDateString();

//目前當地日期 2010/11/1

later.toLocaleTimeString();

//當地時間 下午5:10:30

字元、字串

字元是由一個固定的編碼所組成的,字串其實就是字元的陣列,每個陣列空間為16bit也就是2byte。

例如:

var p = “π”; // π 這個字元是16bit的字元(編碼為0x03c0)

var e = “e”; // e這個字元是17bit的字元(編碼為0x1d452)

我們查看他們的長度p.length等於1但是e.length會等於2是因為在javascript的string編碼中會把0x1d452轉換成UTF-16 編碼”\ud835\udc52″兩個字元去做存取的關係。

正規表示法

Javascript也可以使用正規表示法,簡單的使用方法如下。

var a = /^HTML/;

var b = ‘HTML test’;

a.test(b);                  //true

//判斷b是否有符合a的規則

b.search(a);                     //0

//第一個符合的位置

b.match(a);                     //[‘ HTML’]

//符合的所有元素組成陣列輸出

boolen類型

boolen值只會有兩種狀態,一種是true另一種是false,boolen通常在javascript中用於比較,例如a==2;如果a變數的值是2會回傳true的值,若a變數不等於2會回傳false的值,boolen通常用在if判斷或是迴圈的中止判斷上,以下幾個狀況javascript會把這些狀況判定為false,除了這些狀況以外的非比較

Undefined

Null

0

-0

NaN

空字串””

 

 

結語

以上大概就是Javascript資料型態的一的一些基礎,目前前端技術中廣泛被使用的javascript,包含了很多貿易系統是用網站的方式架設的,或是很多NAS都是在機器上架設local的站台,也需要前端javascript的技術,無論是使用jQuery、AngularJS或是coffee seript 的基礎都是javascript,我認為這些基本的觀念可以避免很多程式上不必要的bug產生,而這些javascript的基礎知識卻常常被忽略了,所以想要分享這些知識給大家。

參考來源:David Flanagan。JavaScript大全(第六版)。歐萊禮出版

 

Comments

No comments yet. Why don’t you start the discussion?

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料