JavaScript 入門教學-01:從基本概念到常見陷阱完整攻略

更新於 發佈於 閱讀時間約 12 分鐘

這裡是學怎麼跟 JavaScript 打招呼,認識它的基本規則和容易踩的雷

JavaScript通常會搭配HTML, CSS 來架設可以互動的網站,我個人覺得JavaScript 蠻反直覺的,譬如打印的語法是console.log,以前在學都不知道是什麼意思。原來,console 是指某個封包.log 就是物件底下的方法,開了窗口做事。

相關課程補充:JavaScript 全攻略:克服 JS 的奇怪部分

ECMA 標準(ES6)(要舉例)

這裡是學什麼:認識 JavaScript 的「遊戲規則」。ECMAScript 就像 JS 的說明書,告訴你這語言怎麼寫。ES6 是 2015 年出的新版規則,加入了很多好用的寫法(像 let 和箭頭函式),學 JS 就從這裡開始!

白話解釋:想像 JS 是個廚房,ES6 教你怎麼用新款烤箱和刀具,做出更好吃的菜。

ECMA標準(ES6),全稱ECMAScript 2015,是JavaScript程式語言的第六個版本,由ECMA International組織於2015年6月發布,有這個框架後可以用在 React、Vue。這個版本有幾個特點,先舉出幾個:

  • let 和 const:幾乎無處不在,因為它們取代了 var,提供更安全的變數作用域管理。const 用於不可變值,let 用於需要重新賦值的變數,避免 var 的提升問題。現在程式開發者會比較喜歡用 let 和 const.
  • 想像你把東西放進盒子,let 是可以換內容的盒子,const 是鎖死的盒子,var 是破洞的盒子,東西會漏出去。用 let 和 const 比較安全!
  1. 作用域(Scope)
    • var:函數作用域(function scope),在整個函數內可access。明明console.log在if外面,但還是讀得到。
    • let const:區塊作用域(block scope),只在 {} 區塊內有效(如 if、for 迴圈)。
if (true) {
var a = 1;
let b = 2;
const c = 3;
}
console.log(a); // 1(房間裡到處都找得到)
console.log(b); // ❌ Error(b 只活在 if 裡)
console.log(c); // ❌ Error(c 只活在 if 裡)
raw-image


  1. 變數提升(Hoisting)(白話文:偷看?)
    • var:會被提升到作用域頂部,宣告前可存取(值為 undefined)。
    • let 和 const:不會
console.log(x); // undefined(偷偷先宣告但沒值)
var x = 5;

console.log(y); // Error
let y = 10;
  1. 重新賦值
    • var 和 let:允許重新賦值。
    • const:不可重新賦值,但物件或陣列的內容可修改(因為它鎖定的是參考而非內容)。
let name = "Tom";
name = "Jerry"; // 可以跑出 Jerry

const age = 30;
age = 31; // 會出現TypeError: Assignment to constant variable.

const person = { name: "Alice" };
person.name = "Bob"; // OK(可以改內容)但不能把整個{}改掉。

JS 宣告變數, var 與 let / const 差異

此圖由AI Grok生成

此圖由AI Grok生成

Global Scope, Local Scope, Block Scope

這裡是學什麼:學東西在程式裡的「活動範圍」,像是家裡還是房間。

白話解釋:Scope 是東西能被看到的範圍。全域(global scope)像放在客廳的東西,全家都能用;區域(local scope)像放房間的東西,只有房間裡能用;區塊(block scope)像抽屜裡的東西,只有特定小地方能用。學這個就像知道東西放哪才安全!

  1. Global Scope(全域作用域):變數定義在程式最外層,任何地方都能存取,像「客廳的東西」。
  2. Local Scope(區域作用域):變數定義在函數內,只有該函數內可存取,像「房間的東西」。
  3. Block Scope(區塊作用域):變數定義在 {} 區塊內(如 if、for),只有區塊內可存取,像「抽屜的東西」。

**補充說明:這裡的 function 是按按鈕的感覺,讓程式會比較有組織、可以重複使用。

想像一下你每天都要做一樣的事(像吃早餐、報時、顯示歡迎詞),你不會每次都重寫整段程式碼和 console.log,只要「按按鈕」就好。

let globalToast = "客廳吐司"; //在全域的狀態,都可以使用
function eat() {
console.log(globalToast); // 客廳吐司
}
eat();
console.log(globalToast); // 客廳吐司
function makeBreakfast() {
var roomToast = "房間吐司";//變數藏在function
console.log(roomToast); // 房間吐司 只能在function裡面
}
makeBreakfast();
console.log(roomToast); // ReferenceError: roomToast is not defined
if (true) {
var varToast = "var吐司"; // 逃到房間或客廳
let letToast = "let吐司"; // 鎖在抽屜
const constToast = "const吐司"; // 鎖在抽屜
console.log(letToast, constToast); // let吐司 const吐司
}
console.log(varToast); // var吐司 (var 會適用全域)
console.log(letToast); // ReferenceError
只有包在{}裡的才能顯現,因為變數被包住,所以後面的console.log就找不到reference

只有包在{}裡的才能顯現,因為變數被包住,所以後面的console.log就找不到reference

七種基本資料型別 vs. 物件(Primitive Data Type & Object, call by value, call by reference)

這裡是學什麼:學 JS 裡的「東西」分兩種:基本資料(像數字、字串)和物件(像陣列)特別注意在JS 沒有像python有字典的功能。還要知道它們怎麼被「複製」(基本資料是影印,物件是共用)。 這個概念有點複雜,我會另外寫文章解釋。

白話解釋:基本資料型別(像 number、string、null)是獨立的便條紙,寫了就不能改;物件(像 {} 或 [])是共享的筆記本,改了大家都能看到。call by value 像影印便條紙,call by reference 像給筆記本的連結。

  • 基本資料型別:傳值(Call by Value),複製值,獨立儲存。
    • 複製值到新變數,修改新變數不影響原值
  • 物件:傳參考(Call by Reference),複製參考位址,共享記憶體。
    • 複製記憶體位址,修改物件屬性會影響所有參考該物件的變數。

七種基本資料型別

  1. Number:數字(整數、浮點數),例如 42 或 3.14。
  2. String:字串,例如 "Hello"。
  3. Boolean:布林值,true 或 false。
  4. Undefined:未定義,例如未初始化的變數。
  5. Null:空值,表示「無」。
  6. Symbol(ES6 引入):唯一標識符,例如 Symbol("id")。
  7. BigInt:大整數,例如 12345678901234567890n。

物件(Object)

  • 包括物件({})、陣列([])、函數(function)等
  • 儲存參考位址,修改會影響所有指向該物件的變數。
Object跟Number是常用的資料型別(此圖由AI生成)

Object跟Number是常用的資料型別(此圖由AI生成)

JS 的 Bug:typeof(null) is object

這裡是學什麼:認識 JS 的「怪脾氣」。比如 typeof null 說它是 object,但你看前面null 明明就是一個,這是 JS 早年的錯誤,留到現在。還有其他容易搞亂的坑。

null 是基本資料型別(Primitive Type),不是物件, typeof 會誤報。

console.log(typeof null); // "object" 這是錯的不要理他

JS 的 Bug : Coercion(為何 string 是 primitive 卻有 .toUpperCase() 方法)

這裡是學什麼:學 JS 怎麼「雞婆幫你轉東西」,還有為什麼簡單的字串(string)也能用 .toUpperCase() 這種招數。

白話解釋:Coercion 是 JS 擅自把東西換成另一種格式(像把數字變字串),有時幫你,有時害你。

  1. 雞婆轉換文字和數字
console.log("1" + 1); // "11"(字串拼接)
console.log("1" - 1); // 0(轉為數字運算)
  • 原因:+ 偏好字串拼接,而 - 強制轉為數字。
  • 提醒讀者使用 parseIntNumber() 明確轉型,Number() 記得要大寫
let str = "1";
console.log(Number(str) + 1); // 2

JS bug :浮點數精準的問題,居然會算錯!!

var sum = 0.1 + 0.2;
console.log(sum); // 0.30000000000000004
console.log(sum.toFixed(1)); // "0.3"

JS 的 Bug : hoisting

這裡是學什麼:學 JS 怎麼「偷跑」。它會把你的 var 或函式提到程式前面,但有時會讓你抓狂。 白話解釋:hoisting 像 JS 在開工前把你的工具(var )先擺好,但沒放東西進去,所以你可能用到空的工具,程式就出錯。

var 的提升可能隱藏錯誤,建議用 let 或 const 讓程式更安全。

console.log(a); // undefined(var 提升)
var a = "吐司";

console.log(b); // ReferenceError(TDZ)
let b = "麵包";

咦,那undefined 跟 ReferenceError差在哪裡?

undefined 是「正常狀態」(偵測到有值,但不知道是誰),而 ReferenceError 是「錯誤狀態」。

raw-image

以上為第一部分 JavaScript 的簡介,因為我覺得 JS 是個很麻煩的語言,所以我用 Grok AI 協助我學習跟產生圖表。

留言
avatar-img
留言分享你的想法!
avatar-img
越南放大鏡 X 下班資工系
14會員
64內容數
雙重身份:越南放大鏡 X 下班資工系 政大東南亞語言學系是我接觸越南語的起點,畢業後找越南外派工作的生活跟資訊時,發現幾乎都是清單式的分享,很難身歷其境。所以我希望「越南放大鏡」可以帶讀者看到更多細節和深入的觀察。 - 下班資工系則是自學資工系的課程內容,記錄實際操作的過程,學習理論的過程。希望可以跟讀者一起成長。
2025/04/24
本系列文章將循序漸進地介紹 JavaScript 的核心概念,從基礎語法到進階應用,例如非同步程式設計和 React 基礎。內容淺顯易懂,並使用生活化的比喻幫助讀者理解,搭配程式碼範例,適合 JavaScript 初學者學習。
Thumbnail
2025/04/24
本系列文章將循序漸進地介紹 JavaScript 的核心概念,從基礎語法到進階應用,例如非同步程式設計和 React 基礎。內容淺顯易懂,並使用生活化的比喻幫助讀者理解,搭配程式碼範例,適合 JavaScript 初學者學習。
Thumbnail
2025/04/21
本文介紹行動通訊網路的演進歷史,從1G到5G,並說明ITU與3GPP在制定通訊規格上的重要角色,以及5G的三大關鍵應用場景:URLLC、eMBB和mMTC。
Thumbnail
2025/04/21
本文介紹行動通訊網路的演進歷史,從1G到5G,並說明ITU與3GPP在制定通訊規格上的重要角色,以及5G的三大關鍵應用場景:URLLC、eMBB和mMTC。
Thumbnail
2025/04/11
這篇文章說明網路的七層模型、IP 位址、通訊埠、TCP/UDP 協定、HTTP 協定、HTTP 狀態碼以及 WebSocket,並解釋它們之間的關係與互動方式。文中包含許多圖表和範例,幫助讀者理解這些網路概念。
Thumbnail
2025/04/11
這篇文章說明網路的七層模型、IP 位址、通訊埠、TCP/UDP 協定、HTTP 協定、HTTP 狀態碼以及 WebSocket,並解釋它們之間的關係與互動方式。文中包含許多圖表和範例,幫助讀者理解這些網路概念。
Thumbnail
看更多
你可能也想看
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
Thumbnail
在這個章節中,我們介紹了HTML的基本概念,包括其作為結構化標記語言的特性、應用領域,以及主要使用者。這些知識為後續的深入學習和實踐奠定了基礎,幫助讀者了解HTML在現代網頁開發中的重要性。
Thumbnail
在這個章節中,我們介紹了HTML的基本概念,包括其作為結構化標記語言的特性、應用領域,以及主要使用者。這些知識為後續的深入學習和實踐奠定了基礎,幫助讀者了解HTML在現代網頁開發中的重要性。
Thumbnail
JSDoc 全名是 JavaScript Documentation,顧名思義是為 JavaScript 所使用的 API 文件,在程式碼內透過註解的方式撰寫,運行後 JSDoc 會自動掃描註解內容,並生成一份網頁版的文件,對於沒有使用 Typescript 開發的專案,也
Thumbnail
JSDoc 全名是 JavaScript Documentation,顧名思義是為 JavaScript 所使用的 API 文件,在程式碼內透過註解的方式撰寫,運行後 JSDoc 會自動掃描註解內容,並生成一份網頁版的文件,對於沒有使用 Typescript 開發的專案,也
Thumbnail
本章節旨在介紹TypeScript的基本語法,包括一般結構、程式進入點、註解以及變數的定義和賦值。這些知識將幫助讀者瞭解TypeScript的基本架構,並且可以開始使用TypeScript進行開發。
Thumbnail
本章節旨在介紹TypeScript的基本語法,包括一般結構、程式進入點、註解以及變數的定義和賦值。這些知識將幫助讀者瞭解TypeScript的基本架構,並且可以開始使用TypeScript進行開發。
Thumbnail
TypeScript是一種由Microsoft開發和維護的開源編程語言。它是JavaScript的超集,主要擴展了JavaScript的語法,增加了靜態類型檢查和其他特性,使得開發大型應用程序更為方便和可靠。
Thumbnail
TypeScript是一種由Microsoft開發和維護的開源編程語言。它是JavaScript的超集,主要擴展了JavaScript的語法,增加了靜態類型檢查和其他特性,使得開發大型應用程序更為方便和可靠。
Thumbnail
JavaScript (簡稱 JS) 是具有一級函數的輕量級、直譯式或即時編譯的程式語言。它因為用作網頁的腳本語言而大為知名,但也用於許多非瀏覽器的環境,像是 Node.js 等。由於 JavaScript 語法上的一些缺點,軟體工程師們又設計出了 CoffeeScript、TypeScript 和
Thumbnail
JavaScript (簡稱 JS) 是具有一級函數的輕量級、直譯式或即時編譯的程式語言。它因為用作網頁的腳本語言而大為知名,但也用於許多非瀏覽器的環境,像是 Node.js 等。由於 JavaScript 語法上的一些缺點,軟體工程師們又設計出了 CoffeeScript、TypeScript 和
Thumbnail
本章目的是為讀者提供有關如何設置JavaScript開發環境的知識,包括在瀏覽器、Node.js和各種編輯器和IDE中編寫和運行JavaScript的信息。此外,本章還介紹了如何架設本地開發伺服器以模擬實際的網頁環境。這些知識對於希望開發前端應用或後端服務的JavaScript開發者來說都是必要的。
Thumbnail
本章目的是為讀者提供有關如何設置JavaScript開發環境的知識,包括在瀏覽器、Node.js和各種編輯器和IDE中編寫和運行JavaScript的信息。此外,本章還介紹了如何架設本地開發伺服器以模擬實際的網頁環境。這些知識對於希望開發前端應用或後端服務的JavaScript開發者來說都是必要的。
Thumbnail
JavaScript是一種具有動態型別、弱型別、原型繼承等特性的高級腳本語言,應用範圍廣泛,包括前端開發、後端開發、移動應用等。它被各種公司和開源社區廣泛使用。學習JavaScript需要掌握ECMAScript標準、異步編程、模塊系統等知識。
Thumbnail
JavaScript是一種具有動態型別、弱型別、原型繼承等特性的高級腳本語言,應用範圍廣泛,包括前端開發、後端開發、移動應用等。它被各種公司和開源社區廣泛使用。學習JavaScript需要掌握ECMAScript標準、異步編程、模塊系統等知識。
Thumbnail
如果你曾經撰寫過網頁,那你一定接觸過 JavaScript 無論是在 NodeJs 或是瀏覽器中運行。 但你有沒有想過,我們寫下的 JS 程式碼,這些看似單純的英文和符號,是如何被轉化為機器能夠理解和執行的程式呢? 今天,讓我們一起深入了解其中的核心主角 ——Google 開發的開源 Java
Thumbnail
如果你曾經撰寫過網頁,那你一定接觸過 JavaScript 無論是在 NodeJs 或是瀏覽器中運行。 但你有沒有想過,我們寫下的 JS 程式碼,這些看似單純的英文和符號,是如何被轉化為機器能夠理解和執行的程式呢? 今天,讓我們一起深入了解其中的核心主角 ——Google 開發的開源 Java
Thumbnail
學習JavaScript的理由有很多,包括容易學習的程式語言、互動式體驗、多功能性、跨平臺、社群和資源豐富、高市場需求。此外,文章提供了設計和前端教學的相關資源連結。文章中還提到了一些與學習JavaScript相關的教學文章和影音教學資源。
Thumbnail
學習JavaScript的理由有很多,包括容易學習的程式語言、互動式體驗、多功能性、跨平臺、社群和資源豐富、高市場需求。此外,文章提供了設計和前端教學的相關資源連結。文章中還提到了一些與學習JavaScript相關的教學文章和影音教學資源。
Thumbnail
在剛開始寫 JavaScript 可能大多數的人不會特別意識到 JavaScript 的型別系統有什麼特別之處,我是在看完 Youtube 上 CS50 的課程,才理解到在不同的程式語言中,會因為語言的特性而有不同的系統,JavaScript 就是偏向比較特別的那一種。
Thumbnail
在剛開始寫 JavaScript 可能大多數的人不會特別意識到 JavaScript 的型別系統有什麼特別之處,我是在看完 Youtube 上 CS50 的課程,才理解到在不同的程式語言中,會因為語言的特性而有不同的系統,JavaScript 就是偏向比較特別的那一種。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News