JavaScript與jQuery:從入門到面試的完整指南

JavaScript與jQuery:從入門到面試的完整指南

第一部分:JavaScript基礎

1.1 JavaScript簡介

JavaScript是一種輕量級的解釋型編程語言,主要用于Web開發,可以為網頁添加交互功能。它是ECMAScript規范的一種實現。

// 第一個JavaScript程序
console.log("Hello, JavaScript!");

1.2 變量聲明

// var - 函數作用域,存在變量提升
var name = "John";// let - 塊級作用域,不存在變量提升
let age = 25;// const - 塊級作用域,常量,不可重新賦值
const PI = 3.14159;

1.3 數據類型

JavaScript有7種原始數據類型和1種引用類型:

// 原始類型
let str = "Hello";          // string
let num = 42;               // number
let bool = true;            // boolean
let nullVar = null;         // null
let undefinedVar;           // undefined
let sym = Symbol("id");     // symbol
let bigInt = 123n;          // bigint// 引用類型
let obj = { name: "John" }; // object
let arr = [1, 2, 3];        // array
let func = function() {};   // function

1.4 類型轉換

// 顯式轉換
let num = Number("123");    // 123
let str = String(123);      // "123"
let bool = Boolean(1);      // true// 隱式轉換
let result = "5" + 2;       // "52" (字符串連接)
let result2 = "5" - 2;      // 3 (數學運算)

1.5 運算符

// 算術運算符
let sum = 10 + 5;   // 15
let diff = 10 - 5;  // 5
let product = 10 * 5; // 50
let quotient = 10 / 5; // 2
let remainder = 10 % 3; // 1// 比較運算符
10 == "10";     // true (值相等)
10 === "10";    // false (值和類型都相等)// 邏輯運算符
true && false;  // false
true || false;  // true
!true;          // false// 三元運算符
let result = age >= 18 ? "成人" : "未成年";

第二部分:函數與作用域

2.1 函數聲明

// 函數聲明
function greet(name) {return `Hello, ${name}!`;
}// 函數表達式
const greet = function(name) {return `Hello, ${name}!`;
};// 箭頭函數
const greet = (name) => `Hello, ${name}!`;

2.2 作用域與閉包

// 作用域鏈
function outer() {let outerVar = "outer";function inner() {let innerVar = "inner";console.log(outerVar); // 可以訪問外部變量}inner();
}// 閉包
function createCounter() {let count = 0;return function() {count++;return count;};
}const counter = createCounter();
console.log(counter()); // 1
console.log(counter()); // 2

2.3 this關鍵字

// 不同場景下的this
const obj = {name: "John",greet: function() {console.log(this.name); // John}
};function showThis() {console.log(this); // 嚴格模式下undefined,非嚴格模式下window
}// 改變this指向
const boundFunc = showThis.bind(obj);
boundFunc(); // this指向obj

第三部分:對象與數組

3.1 對象操作

const person = {name: "John",age: 30,greet: function() {return `Hello, ${this.name}`;}
};// 訪問屬性
console.log(person.name);        // John
console.log(person["age"]);      // 30// 添加屬性
person.city = "New York";// 刪除屬性
delete person.age;// 遍歷對象
for (let key in person) {console.log(key, person[key]);
}// 對象方法
Object.keys(person);     // ["name", "age", "greet"]
Object.values(person);   // ["John", 30, function]
Object.entries(person);  // [["name", "John"], ["age", 30], ["greet", function]]

3.2 數組操作

const numbers = [1, 2, 3, 4, 5];// 常用數組方法
numbers.push(6);         // 末尾添加
numbers.pop();           // 末尾刪除
numbers.unshift(0);      // 開頭添加
numbers.shift();         // 開頭刪除// 遍歷方法
numbers.forEach((item, index) => {console.log(item, index);
});// 轉換方法
const doubled = numbers.map(num => num * 2);
const evens = numbers.filter(num => num % 2 === 0);
const sum = numbers.reduce((total, num) => total + num, 0);// 查找方法
numbers.find(num => num > 3);    // 4
numbers.findIndex(num => num > 3); // 3
numbers.includes(3);             // true

第四部分:異步編程

4.1 回調函數

function fetchData(callback) {setTimeout(() => {callback("Data received");}, 1000);
}fetchData((data) => {console.log(data);
});

4.2 Promise

const promise = new Promise((resolve, reject) => {setTimeout(() => {Math.random() > 0.5 ? resolve("Success") : reject("Error");}, 1000);
});promise.then(result => console.log(result)).catch(error => console.error(error)).finally(() => console.log("Completed"));

4.3 async/await

async function fetchData() {try {const response = await fetch('https://api.example.com/data');const data = await response.json();return data;} catch (error) {console.error('Error:', error);}
}fetchData().then(data => console.log(data));

第五部分:DOM操作

5.1 選擇元素

// 選擇單個元素
const element = document.getElementById('myId');
const element = document.querySelector('.myClass');// 選擇多個元素
const elements = document.getElementsByClassName('myClass');
const elements = document.querySelectorAll('.myClass');

5.2 操作元素

// 修改內容
element.innerHTML = '<strong>New content</strong>';
element.textContent = 'Plain text';// 修改樣式
element.style.color = 'red';
element.classList.add('active');
element.classList.remove('inactive');
element.classList.toggle('hidden');// 修改屬性
element.setAttribute('data-id', '123');
const id = element.getAttribute('data-id');
element.removeAttribute('data-id');

5.3 事件處理

// 添加事件監聽器
element.addEventListener('click', function(event) {console.log('Clicked:', event.target);
});// 事件委托
document.addEventListener('click', function(event) {if (event.target.matches('.btn')) {console.log('Button clicked');}
});// 常見事件
element.addEventListener('click', handler);      // 點擊
element.addEventListener('mouseover', handler);  // 鼠標移入
element.addEventListener('keydown', handler);    // 鍵盤按下
element.addEventListener('submit', handler);     // 表單提交

第六部分:ES6+新特性

6.1 解構賦值

// 數組解構
const [first, second, ...rest] = [1, 2, 3, 4, 5];// 對象解構
const { name, age, ...otherProps } = person;// 函數參數解構
function greet({ name, age }) {return `Hello, ${name}! You are ${age} years old.`;
}

6.2 擴展運算符

// 數組擴展
const arr1 = [1, 2, 3];
const arr2 = [4, 5, 6];
const combined = [...arr1, ...arr2];// 對象擴展
const obj1 = { a: 1, b: 2 };
const obj2 = { c: 3, d: 4 };
const merged = { ...obj1, ...obj2 };

6.3 模塊化

// export
export const PI = 3.14159;
export function calculateArea(radius) {return PI * radius * radius;
}// import
import { PI, calculateArea } from './math.js';
import * as math from './math.js';

第七部分:jQuery基礎

7.1 jQuery簡介

jQuery是一個快速、簡潔的JavaScript庫,簡化了HTML文檔遍歷、事件處理、動畫和Ajax交互。

<!-- 引入jQuery -->
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>

7.2 選擇元素

// 選擇元素
$('#myId');         // ID選擇器
$('.myClass');      // 類選擇器
$('div');           // 標簽選擇器
$('div.myClass');   // 組合選擇器// 篩選元素
$('li').first();    // 第一個li
$('li').last();     // 最后一個li
$('li').eq(2);      // 第三個li
$('li').filter('.active'); // 篩選有active類的li

7.3 DOM操作

// 獲取和設置內容
$('#element').html();           // 獲取HTML
$('#element').html('<p>New content</p>'); // 設置HTML
$('#element').text();           // 獲取文本
$('#element').text('New text'); // 設置文本// 獲取和設置屬性
$('#element').attr('data-id');          // 獲取屬性
$('#element').attr('data-id', '123');   // 設置屬性
$('#element').removeAttr('data-id');    // 刪除屬性// 操作CSS
$('#element').css('color', 'red');              // 設置樣式
$('#element').addClass('active');               // 添加類
$('#element').removeClass('inactive');          // 刪除類
$('#element').toggleClass('hidden');            // 切換類

7.4 事件處理

// 綁定事件
$('#button').click(function() {console.log('Button clicked');
});$('#form').submit(function(event) {event.preventDefault();console.log('Form submitted');
});// 事件委托
$('#container').on('click', '.btn', function() {console.log('Button clicked');
});// 常用事件
$('#element').click(handler);       // 點擊
$('#element').hover(handler);       // 鼠標懸停
$('#element').focus(handler);       // 獲得焦點
$('#element').change(handler);      // 值改變

7.5 動畫效果

// 顯示和隱藏
$('#element').show();           // 顯示
$('#element').hide();           // 隱藏
$('#element').toggle();         // 切換顯示/隱藏// 淡入淡出
$('#element').fadeIn();         // 淡入
$('#element').fadeOut();        // 淡出
$('#element').fadeToggle();     // 切換淡入/淡出// 滑動
$('#element').slideDown();      // 向下滑動
$('#element').slideUp();        // 向上滑動
$('#element').slideToggle();    // 切換滑動// 自定義動畫
$('#element').animate({opacity: 0.5,left: '+=50',height: 'toggle'
}, 1000);

7.6 Ajax

// GET請求
$.get('https://api.example.com/data', function(data) {console.log('Data received:', data);
});// POST請求
$.post('https://api.example.com/data', { name: 'John' }, function(data) {console.log('Data received:', data);
});// Ajax完整配置
$.ajax({url: 'https://api.example.com/data',method: 'GET',dataType: 'json',success: function(data) {console.log('Success:', data);},error: function(xhr, status, error) {console.error('Error:', error);}
});

第八部分:常見面試題

8.1 JavaScript基礎

  1. var、let、const的區別

    • var:函數作用域,存在變量提升
    • let:塊級作用域,不存在變量提升
    • const:塊級作用域,常量,不可重新賦值
  2. == 和 === 的區別

    • ==:比較值,會進行類型轉換
    • ===:比較值和類型,不會進行類型轉換
  3. 什么是閉包?有什么作用?
    閉包是函數和其詞法環境的組合,可以訪問外部函數的作用域。用于數據封裝和私有變量。

8.2 異步編程

  1. Promise的狀態

    • pending:初始狀態
    • fulfilled:操作成功完成
    • rejected:操作失敗
  2. async/await的優勢

    • 代碼更簡潔,避免回調地獄
    • 錯誤處理更簡單,可以使用try/catch
    • 更符合同步編程的思維習慣

8.3 DOM操作

  1. 事件委托的原理
    利用事件冒泡機制,在父元素上監聽事件,通過event.target判斷具體觸發元素。

  2. 虛擬DOM的優勢

    • 提高性能,減少直接操作DOM的次數
    • 提供跨平臺能力
    • 簡化開發流程

8.4 jQuery相關

  1. jQuery選擇器與原生選擇器的區別
    jQuery選擇器返回jQuery對象,支持鏈式調用;原生選擇器返回DOM元素或NodeList。

  2. $(document).ready()的作用
    確保DOM完全加載后再執行代碼,類似于原生的DOMContentLoaded事件。

第九部分:性能優化

9.1 JavaScript優化

// 避免全局變量
(function() {// 代碼在這里執行
})();// 使用事件委托
document.addEventListener('click', function(event) {if (event.target.matches('.btn')) {// 處理點擊}
});// 防抖和節流
function debounce(func, delay) {let timeout;return function() {clearTimeout(timeout);timeout = setTimeout(() => func.apply(this, arguments), delay);};
}function throttle(func, delay) {let lastCall = 0;return function() {const now = new Date().getTime();if (now - lastCall < delay) return;lastCall = now;return func.apply(this, arguments);};
}

9.2 jQuery優化

// 緩存jQuery對象
const $elements = $('.myClass');// 使用鏈式調用
$('#element').addClass('active').css('color', 'red').fadeIn();// 使用事件委托
$('#container').on('click', '.btn', handler);// 合理使用選擇器
$('div.myClass');   // 比 $('.myClass') 更快

第十部分:現代JavaScript開發

10.1 模塊打包工具

// webpack配置示例
module.exports = {entry: './src/index.js',output: {filename: 'bundle.js',path: path.resolve(__dirname, 'dist')},module: {rules: [{test: /\.js$/,exclude: /node_modules/,use: 'babel-loader'}]}
};

10.2 代碼質量工具

// ESLint配置
module.exports = {env: {browser: true,es2021: true},extends: ['eslint:recommended'],parserOptions: {ecmaVersion: 12,sourceType: 'module'},rules: {'no-console': 'warn'}
};

總結

JavaScript和jQuery是現代Web開發的核心技術。JavaScript提供了強大的編程能力,而jQuery簡化了DOM操作和跨瀏覽器兼容性問題。掌握這些技術對于前端開發者至關重要。

學習建議:

  1. 先扎實掌握JavaScript基礎
  2. 理解異步編程和閉包等核心概念
  3. 熟練操作DOM和事件處理
  4. 學習jQuery提高開發效率
  5. 關注ES6+新特性
  6. 實踐性能優化技巧

不斷練習和構建項目是掌握這些技術的最佳方式!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/96908.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/96908.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/96908.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

解決:Ubuntu、Kylin、Rocky系統中root用戶忘記密碼

解決Linux系統中root用戶忘記密碼 Ubuntu2204 重啟電腦&#xff0c;啟動時&#xff0c;長按Shift鍵&#xff08;對于 BIOS 系統&#xff09;或 Esc 鍵&#xff08;對于 UEFI 系統&#xff09;進入GRUB菜單 步驟1&#xff1a;重啟Ubuntu系統&#xff0c;長按Shift鍵進入Ubuntu…

ENVI系列教程(二)——自定義坐標系(北京 54、西安 80、2000 坐標系)

目錄 1 概述 1.1 地理投影的基本原理 1.2 國內坐標系介紹 1.3 參數的獲取 2 詳細操作步驟 2.1 添加橢球體 2.2 添加基準面 2.3 定義坐標系 2.4 使用自定義坐標系 1 概述 1.1 地理投影的基本原理 常用到的地圖坐標系有 2 種,即地理坐標系和投影坐標系。地理坐標系是…

一種基于因果干預的少樣本學習的故障診斷模型

一、研究背景與問題 ?工業背景?:機械故障診斷對工業系統安全至關重要,但實際中故障樣本稀少,難以訓練傳統深度學習模型。 ?現有問題?: 當前少樣本學習(FSL)方法大多基于相關性而非因果關系建模,容易學習到偽相關特征,導致模型可解釋性差、泛化能力弱。 跨組件故障診…

機器視覺光源的尺寸該如何選型的方法

機器視覺光源的尺寸該如何選型的方法&#x1f3af;機器視覺光源的尺寸選型的方法&#x1f3af;一、選型案例&#x1f3af;二、照射方式&#x1f3af;三、鏡頭選擇&#x1f3af;四、光源架構光源的工作距離與視野大小&#x1f3af;五、總結&#xff1a;光源選型 —— 機器視覺檢…

HTML新屬性

HTML5引入了許多新屬性&#xff0c;旨在增強語義化、交互性和多媒體支持。以下是一些重要的新屬性及其用途分類&#xff1a;語義化與結構屬性data-*&#xff1a;自定義數據屬性&#xff0c;允許開發者存儲額外信息&#xff08;如data-id"123"&#xff09;。hidden&am…

從工地到鏈上:一個土建人的 Web3 轉行經歷

Web3 的風&#xff0c;終究還是吹到了土建行業。2017 年&#xff0c;土建專業&#xff08;給排水工程&#xff09;的劉正源偶然看到一則關于比特幣的新聞&#xff0c;被它背后的經濟模型與技術架構深深震撼。到了 2021 年&#xff0c;他在工地上再次聽人提起區塊鏈&#xff0c;…

20250914-03: Langchain概念:提示模板+少樣本提示

20250914-03: Langchain概念&#xff1a;提示模板少樣本提示 聊天模型 消息 提示 結構化輸出 &#x1f3af; 學習目標 掌握如何“喂給模型正確的輸入”并“解析出想要的輸出”。 &#x1f517; 核心概念 ?聊天模型&#xff08;ChatModel&#xff09;?消息&#xff08;M…

【AI推理部署】Docker篇04—Docker自動構建鏡像

Docker 自動構建鏡像1. Dockfile 編寫2. 鏡像使用使用 Dockerfile 構建鏡像 Dockerfile 其實就是把我們前面的一系列安裝、配置命令寫到一個文件中&#xff0c;通過 docker build 命令&#xff0c;一鍵完成鏡像的構建。接下來&#xff0c;我們以 bitnami/pytorch:2.1.1 作為基礎…

LeetCode 674.最長連續遞增序列

給定一個未經排序的整數數組&#xff0c;找到最長且 連續遞增的子序列&#xff0c;并返回該序列的長度。 連續遞增的子序列 可以由兩個下標 l 和 r&#xff08;l < r&#xff09;確定&#xff0c;如果對于每個 l < i < r&#xff0c;都有 nums[i] < nums[i 1] &am…

貪心算法java

貪心算法簡介貪心算法是一種在每一步選擇中都采取在當前狀態下最優&#xff08;局部最優&#xff09;的選擇&#xff0c;從而希望導致結果是全局最優的算法。貪心算法通常用于解決最優化問題&#xff0c;如最短路徑、最小生成樹、任務調度等。貪心算法的基本步驟問題分析&#…

【華為OD】解鎖犯罪時間

【華為OD】解鎖犯罪時間 題目描述 警察在偵破一個案件時&#xff0c;得到了線人給出的可能犯罪時間&#xff0c;形如"HH:MM"表示的時刻。根據警察和線人的約定&#xff0c;為了隱蔽&#xff0c;該時間是修改過的&#xff0c;解密規則為&#xff1a;利用當前出現過的數…

基于linux操作系統的mysql安裝

一、檢查自己的操作系統是否已經有存在的mysql 1.存在 2.不存在 二、基于操作系統不存在mysql,找官方yum源 網址&#xff1a; Index of /232905https://repo.mysql.com/ 網站打開是這樣 看看自己的操作系統是哪個版本&#xff0c;再下載哪個版本&#xff0c;如果和我一樣裝…

如何用 Git Hook 和 CI 流水線為 FastAPI 項目保駕護航?

url: /posts/fc4ef84559e04693a620d0714cb30787/ title: 如何用Git Hook和CI流水線為FastAPI項目保駕護航? date: 2025-09-14T00:12:42+08:00 lastmod: 2025-09-14T00:12:42+08:00 author: cmdragon summary: 持續集成(CI)在FastAPI項目中通過頻繁合并代碼和自動驗證,確保…

【微服務】SpringBoot 整合Kafka 項目實戰操作詳解

目錄 一、前言 二、Kafka 介紹 2.1 什么是 Apache Kafka 2.2 Kafka 核心概念與架構 2.3 Kafka 為什么如此強大 2.4 Kafka 在微服務領域的應用場景 三、Docker 部署Kakfa服務 3.1 環境準備 3.2 Docker部署Kafka操作過程 3.2.1 創建docker網絡 3.2.2 啟動zookeeper容器…

多樓層室內定位可視化 Demo(A*路徑避障)

<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <title>多樓層室內定位可視化 Demo&#xff08;A*避障&#xff09;</title> <style>body { margin: 0; overflow: hidden; }#layerControls { p…

vue2+jessibuca播放h265視頻(能播h264)

文檔地址&#xff1a;http://jessibuca.monibuca.com/api.html#background 1,文件放在public中 2,在html中引入 3&#xff0c;子組件 <template><div :id"container id"></div> </template><script> export default {props: [url,…

Docker命令大全:從基礎到高級實戰指南

Docker命令大全&#xff1a;從基礎到高級實戰指南 Docker作為現代容器化技術的核心工具&#xff0c;其命令體系是開發運維的必備技能。本文將系統整理常用命令&#xff0c;助您高效管理容器生態。一、基礎命令篇 1. 鏡像管理 # 拉取鏡像 $ docker pull nginx:latest# 查看本地鏡…

不鄰排列:如何優雅地避開“數字CP“

排列組合奇妙冒險&#xff1a;如何優雅地避開"數字CP"&#xff1f; ——容斥原理教你破解連續數對排列難題 &#x1f4dc; 問題描述 題目&#xff1a;求1,2,3,4,5,6,7,81,2,3,4,5,6,7,81,2,3,4,5,6,7,8的排列個數&#xff0c;使得排列中不出現連續的12,23,34,45,56,6…

S7-200 SMART PLC 安全全指南:配置、漏洞解析與復現防護

在工業自動化領域&#xff0c;PLC&#xff08;可編程邏輯控制器&#xff09;作為核心控制單元&#xff0c;其安全性直接關系到生產系統的穩定運行與數據安全。西門子 S7-200 SMART 系列 PLC 憑借高性價比、易用性等優勢&#xff0c;廣泛應用于中小型自動化項目。但實際使用中&a…

【計算機網絡 | 第14篇】應用層協議

文章目錄 應用層協議的核心定義&#xff1a;“通信合同”的關鍵內容&#x1f95d;應用層協議的分類&#xff1a;公共標準 vs 專有協議&#x1f9fe;公共標準協議專有協議 應用層協議與網絡應用的關系&#x1f914;案例1&#xff1a;Web應用案例2&#xff1a;Netflix視頻服務 應…