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视频服务 应…