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大全(第六版)。歐萊禮出版