JavaScript 核心機制與對抗實驗室

從後端腳本跨越到前端事件驅動:暴露底層變數,打破 DOM 黑箱。

模組 0:跨語言機制映射表 (Meta-Rule Mapping)

將已知變數(PHP/Python)映射至未知變數(JS),建立底層語法對抗模型。

機制維度 PHP (後端直譯) Python (通用直譯) JavaScript (前端事件驅動) 核心差異與邊界漏洞
變數宣告 $var = 10; var = 10 let var = 10;
const pi = 3.14;
JS 引入區塊作用域 let/const,防禦早期 var 污染全域記憶體的漏洞。
字串連接 "A" . "B" "A" + "B" "A" + "B"
`A ${var}`
JS 的 + 兼具數學加法與連接,極易引發隱式轉型漏洞。推薦使用模板字面值 `...`
陣列追加 array_push($arr, 1); arr.append(1) arr.push(1); JS 陣列長度是動態的,可透過 arr.length 提取長度。
相等比對 == (鬆散) / === (嚴格) == (值) / is (記憶體位址) == (鬆散) / === (嚴格) 危險邊界:JS 的 == 會強制轉型(如 0 == false 為真)。永遠使用 === 斷言。
畫面輸出 echo "<h1>"; print("<h1>") el.innerText = "..." PHP 從伺服器噴出字串;JS 在用戶瀏覽器內,透過 DOM 橋樑動態竄改現有畫面。

模組 1:代碼區 (陣列亂數提取)

教科書 P.5:宣告陣列、產生隨機索引、透過 getElementById 覆蓋 DOM 節點。

let quoteArray = [
  "一寸光陰一寸金,寸金難買寸光陰。",
  "勇敢踏出舒適圈,才能迎來人生的起點。",
  "與其跟他人比較,不如跟昨日的自己比較。"
];

function showRandomQuote() {
  // 產生 0 到 陣列長度-1 的隨機整數
  let quoteIndex = Math.floor(Math.random() * quoteArray.length);
  
  // DOM 橋接與突變
  document.getElementById("quote").innerText = 
      quoteArray[quoteIndex];
}

模組 1:UI 互動區 (Event Trigger)

點擊下方按鈕,觸發 onclick 事件,觀察上方代碼如何改變下方黑箱內容。

(等待觸發事件...)

模組 2:代碼區 (狀態突變與防禦邊界)

全域變數遞增、邏輯閘 if...else 防禦、升級花費倍增模型。

// 宣告全域狀態變數
let x = 0;      // 當前點數
let i = 1;      // 每次點擊獲得的點數 (Click Power)

function increment() {
  x = x + i;
  document.getElementById("counter").innerText = x;
}

function upgradeIncrement() {
  let price = i * 10;  // 動態計算升級成本
  
  // 斷言:判斷是否有足夠點數
  if (x >= price) {
    x = x - price;   // 扣除成本
    i = i * 2;       // 點擊力倍增
    
    // 更新 DOM 顯示
    document.getElementById("counter").innerText = x;
    document.getElementById("price").innerText = i * 10;
    document.getElementById("msg").innerText = "升級成功!";
  } else {
    // 條件不符的分支處理
    document.getElementById("msg").innerText = "您的點數不足。";
  }
}

模組 2:UI 互動區 (Clicker Game)

測試變數的突變。觀察 x (總分) 與 i (點擊力) 是如何交互作用的。

當前點數變數 x
0
當前點擊力變數 i = 1
升級所需成本 price: 10

引擎監控日誌 (Engine Console)

[系統] DOM 已完全載入,等待 HTML onclick 綁定觸發...