iT邦幫忙

2021 iThome 鐵人賽

DAY 2
0
自我挑戰組

追憶JS年華系列 第 2

Day-02 JavaScript資料型別(1)

  • 分享至 

  • xImage
  •  

歷史背景

1990年代,是灰色緝毒犬PC防毒,迴紋針干擾文書,Internet Explorer 還是一支放大鏡,而網景Netscape Navigator 4.x宛如麥哲倫的時代。上網連線費以電話費計算,但凡遇見gif動圖就要停止加載,遑論拜見更多動態網頁特效。

不旋踵,Active Desktop偕著Windows 98 + IE 4.0 正式揭幕微軟瀏覽器壟斷王朝,也稍微過早地(在寬頻尚未普及的台灣)引入電腦聽電台、電腦看電視的新生活型態。儘管桌面那條塞滿「X視」、「OO之音」的吃資源頻道列沒有真正實用過(也沒人想在桌面開網頁,欠當機嗎?)。但自此開始,電腦網頁動態功能越來越多,而各種該動未動、載入異常的影片、動態網頁元素的Java們與Script們--諸如一捲紙(VBScript)、另一捲紙(JScript)、一杯咖啡(Java Applet)、另一杯咖啡(CoffeeScript)、阿貴動畫(不對)全部成為F(不對)紅色F符號(ActionScript)以及常常讓「動畫文字」、「輸入帳號密碼」區域一片灰的本文主角JavaScript也越來越常見,除了知道他們神通廣大,功能很多,一旦出現就可能當機之外,一但細究,都是一本本的磚塊大部頭。
https://ithelp.ithome.com.tw/upload/images/20210917/201410416u5HWuvJij.jpg

在這時空背景下,網景Netscape 公司為增進網頁載入效率,遂著手開發當時還不叫JavaScript的JavaScript。網頁切換淡入淡出、狀態欄文字跑動、滑鼠觸發閃爍效果......不知凡幾的炫目效果,令JavaScript一度流行,但隨之而來的安全漏洞、裝飾過剩(險得俗氣)令它一度逐漸退潮。直至2005年AJAX技術興起,加上數十年中歷經數次基於歐洲電腦製造商協會(ECMA)標準規格(ECMAScript)的改版與規範,JavaScript終於成為各瀏覽器的普遍內建語言,得到廣泛使用,更是入門新手最有用的程式語言(之一)。

資料型別:變數

基本規範

與一般程式語言相同,JavaScript也擁有幾類資料型別,構成其運作、運算、邏輯判斷的基礎。其中「變數」就是存放資料與進行運算的基本單位(資料的容器)。

變數名稱須遵守若干規則:

  1. 開頭須為英文字母、底線或$符號(取「數字」命名的錯誤很常見,對,就是我)
  2. 慣用小駝峰或大駝峰命名,如 camelCase、CamelCase。
  3. 不可用 - 符號命名。
  4. 開頭不能用數字。
  5. 名稱不得為系統保留字或關鍵字,如:this、super、short。
  6. 可以使用中文命名,但在其他語言系統上可能變亂碼,不建議。

使用變數,就必須宣告變數。常見的宣告法有var、let、const三種,其間差別容後再秉。使用效果如:

var a; //宣告變數a,但未指定值,內容為undefined
var b = 1 //宣告變數b,指定值為1,內容為1

本處範例,以let或const宣告也有相同結果。

若未宣告就使用變數,會觸發錯誤(ReferencesError),這可以在Chrome開發者工具的Console下察知。但未被宣告的變數,仍可被指定值。如

d = 5;
console.log(d); //會印出變數d的值「5」

然而,這將使d變為全域變數,可能侵入不該影響的其他段落,在程式碼較多的程式中難以排查,易生意外。

變數提昇

這是JavaScript的特產。一般而言,程式撰寫及運作依循「由上至下」的順序,上面(前面)的定義與行為(出現)>影響>下面(後面),反之則不然。猶如:

昨天吃太多>導致>今天壞肚子
明天睡懶覺<不影響>今天開機coding

舉例來說,JavaScript中有undefined與not defined兩種「錯誤」訊息。前者是一切變數的預設值,代表「尚未定義」,其本身也是一個值(但還沒得到真正賦值,比如5、6、30等數字)。後者代表「沒有定義」,若變數沒有宣告就印出,就會如此。

換言之,變數要被宣告,能正常使用,才擁有值。又因為「由上至下」的邏輯,倘如沒有先(在上面)宣告,接著要(在下面)呼叫該變數,就理應得到not defined(沒有定義)錯誤。

然而,在「變數提昇」的影響下,若在函式下方用var宣告變數,結果不會跑出not define,而是跑出undefined,因為此時可以視作「JavaScript把變數提升到函式上方」了。

值得注意的是,僅有使用全域宣告的var才有此提昇效果。


上一篇
Day-01 躋身鐵人煉成鋼
下一篇
Day-03 JavaScript資料型別(2)
系列文
追憶JS年華30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言