var $obj = {} 僅創建一個普通物件字面量,與 jQuery 無任何關係。`$` 只是合法變數名字元,**不具備任何魔力**。
透過 jQuery 選擇器/建構函數返回的、包含 DOM 元素陣列並擁有 jQuery 方法 (`css`, `animate`, `on`...) 的包裝器物件。
| 場景 | 代碼 | 說明 |
|---|---|---|
| 選擇現有 DOM | var $btn = $('#submitBtn'); | 最常用,`$` 開頭命名慣例標記「這是 jQuery 物件」 |
| 創建新元素 | var $div = $(''); | 傳入 HTML 字串創建 |
| 包裝原生 DOM | var $el = $(document.getElementById('myId')); | 互操作場景 |
| 延遲初始化 (佔位) | var $modal = null; // 稍後賦值 | 聲明變數,初始為 null,使用前判斷 |
| 空 jQuery 物件 (罕用) | var $empty = $(); | 長度為 0 的 jQuery 物件,可安全調用方法不報錯 |
var $obj = {}; // 普通物件 {}
$obj.animate(...); // TypeError: $obj.animate is not a function
// 因為 {} 沒有 animate 方法,只有 jQuery.prototype 上有
// 1. 命名慣例:$ 開頭 = jQuery 物件 / DOM 節點集合
var $userList = $('.user-list');
var $submitBtn = $('#submitBtn');
// 2. 使用前防禦性檢查
if ($userList.length) { // jQuery 物件 length > 0 表示選中到元素
$userList.fadeIn();
}
// 3. TypeScript 類型註解 (現代專案)
const $userList: JQuery = $('.user-list');
// 4. 避免全域變數污染,使用 IIFE/模組封裝
(function($) {
const $cache = {};
function getPanel(id) {
if (!$cache[id]) $cache[id] = $(`#${id}`);
return $cache[id];
}
})(jQuery);
// 錯誤:重複選擇
$('.item').css('color', 'red');
$('.item').hide(); // 再次遍歷 DOM
// 正確:緩存
const $items = $('.item');
$items.css('color', 'red').hide(); // 鏈式調用,單次遍歷