2009
08 16

淺談JavaScript-受人誤解最深的程式語言

19:09:00   閱讀數 ( 821 )   回應數 ( 0 )
任何一位寫網頁程式的程式設計師, 一定都知道有JavaScript這個程式語言,
但它在某個層面而言,它也是最不受重視的程式語言, 我們就稍為的談談它吧.

I am JavaScript, Not Java.

JavaScript是早期由Netscape Navigator(網景公司)的工程師Brendan Eich,
所開發出來的程式語言,最初版本掛載於1996年的Netscape2.0上。

想當初網際網路剛起飛,用Netscape的時候,Raz幾乎都是上聊天室
當時正是CGI(Common Gateway Interface)大行其道的時候,而Raz觸接的環境
大多以Perl來寫CGI居多,雖然後來有學著改CGI程式,
但Raz始終沒有把Perl修成正果…

JavaScript原本要命名為 LiveScript 的,為什麼會變成JavaScript呢?
或許有Java的啟發才有它的誕生,但真正的原因是Netscape與Sun公司的行銷策略。

在Netscape將JavaScript移交給ECMA(一個標準化組職)後,誕生了ECMAScript
我們現在使用的大多為ECMAScript第3版(ECMA-262 3rd Edition手冊下載),
而各瀏覽器又以不同的語言對應這個標準,
若你使用IE8,那就是JScript(ver6),若是FireFox,則是JavaScript(1.8)。

不過我們通常不管這些稱號、版本上的差異,一般我們都統稱為JavaScript,
未來會有ECMAScript第4版,也就是JavaScript 2.0,目前還在研發中。


JavaScript重要嗎?
JavaScript在傳統網頁設計的領域中,許多設計師認為它是個很簡單的程式語言,
所以通常都不太深入研究,但一個極具互動功能的網站,又怎能少得了JavaScript?

當然,會有人告訴你可以整個網站使用Flash或SliverLight來實作,
但絕大多數的功能我們都還是會以JavaScript來做,例如我們常用的Ajax,
像我們使用ASP.NET中的ServerControl,有許多的功能都仰賴JavaScript完成。


JavaScript是OOP(Object-oriented programming)的嗎?
我想這個答案很直接,沒錯,JavaScript一樣是物件導向語言,
雖然不像寫C#、VB、Java等程式語言,有支援強型別的物件導向,
但JavaScript一樣有封裝、繼承...等等的物件導向概念,
只不過因為沒有class、private、public等關鍵字,所以實作的方式比較不一樣。


JavaScript的實值與參考類型

較特殊的值為:
  • Null (空值)
  • Undefined (未定義)
  • NaN  (非數字)
  • Infinity (無限大)

JavaScript常用的類型如下:
  • Number (數值類型)
  • String (字串類型)
  • Boolean (布林值)
  • Object (物件類型)
    • Function
    • Array (陣列)
    • Date (日期)
    • Math (數學)
    • RegExp (正則表達式)
奇特的true/false規則:
比較奇特的一點是,當變數值為false、0、""、NaNnullundefined的時候,
它們都會是等於false,反之則為等於true,
所以你可以比對某變數是否為true或false來知道一個值是否正確。


JavaScript是個強大的程式語言
為什麼說JS是個強大的程式語言?C#在3.0才加入了類別擴充、匿名函式等新功能,
但這些功能在JS中卻早就存在了,或許就是因JS並不是強型別程式語言,
所以這些功能不但很好用,而且還很容易造成濫用。

我們來看一段JavaScript的Code..
var AddBoth = function( a, b ){ return a + b; };
var varA = 10;
var varB = 20;
var Result = AddBoth
(
	(function(x){ return x*x; })(varA),
	varB
);

//這邊我們會得到 120
window.alert( 'Result = ' + Result );

我們知道var AddBoth是一個匿命函式,而比較令人費解的是第6行的寫法,
其實它也是一個匿命函式,以兩組小括號為準,第一個括號輸入函式,
第二個括號則是傳入參數。

不過其實JavaScript還有許多很有趣的功能,我們再來看一個奇怪一點的Code..
//寫一個製造函式的函式
var MakeSumFunc = function( filter )
{
	return function()
	{
		var Total = 0;
		for (var i = 0, j = arguments.length; i < j; i++)
		{
			if( (filter) ? filter(arguments[i]) : true ) Total += arguments[i];
		}
		return (Total);
	}
};

//這樣我們可以得到一個統計所有數值的函式
var FuncSun = MakeSumFunc();
var SumResult = FuncSun(1,2,3,4,5,6,7,8,9);

//理所當然, 這邊得到的值是 45
window.alert( SumResult );

//那今天我們如果要為每個值加入判斷規則, 例如只加入奇數
//寫一個奇數會回傳true的函式
function IsOdd(number){ return !(number % 2 == 0); }

//然後產生新函式
var FuncOddSum = MakeSumFunc(IsOdd);
var OddSumResult = FuncOddSum(1,2,3,4,5,6,7,8,9);

//然後我們就會得到 25
window.alert( OddSumResult );

JavaScript是弱類型的程式語言,它連函式的傳入參數都可以省略,
Raz利用這個特性以及"奇特的true/false規則",寫了上面這個範例,
當然Raz只是舉了一個小小的例子,您還是可以有自已的寫法,
JS寫久了,許多人都會有自已一套寫法及應用方式,

最後呢,Raz只能說......
JavaScript真的是變化無窮,只是你有沒有去發現而已.
2009-08-16 19:09:00 By RazgrizHsu       821 Visits

關於站長 About

RazgrizHsu 的大頭照o.o RazgrizHsu
程式設計之偉大航道
其中的一個小設計師
致力於開發技術研究
願能與各位一同成長!

大家來噗浪 Plurk

免責聲明 Disclaimer

  • 本站所轉載或引用之資料,其版權和知識產權屬於原始所有者。
  • 本站雖力求資料準確,但無法保證或擔保全數資料均準確無誤,許多資料具有時效或環境上的不同,在使用本站資料前應先行初步判斷,若是發現問題,歡迎您通知本站。
  • 在任何情況下,因本站所造成的直接、間接、偶然或其他衍生問題,本站不承擔任何責任。
RandomART程式道-88x31連結用Logo
Copyright © Runart.net 暴走的藝術 since 2009 - 2011
Design By Razgriz Hsu, Asp.net MVC 3 & SqlServer 2008R2.