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 下班資工系
58會員
108內容數
雙重身份:越南放大鏡 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
在這個章節中,我們介紹了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
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News