还剩48页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
和网页编程JavaScript欢迎来到JavaScript和网页编程课程!在数字化时代,网页开发技能已成为最受欢迎的专业能力之一通过本课程,你将掌握现代网页编程的核心技术与实践方法我们将从JavaScript基础知识开始,逐步深入探索高级概念和实际应用无论你是编程新手还是希望提升技能的开发者,这门课程都将为你提供系统的学习路径和丰富的实践机会通过50个精心设计的教学模块,你将逐步构建起完整的JavaScript知识体系,并能够独立开发交互性强、功能丰富的现代网页应用什么是?JavaScript前端三剑客历史与发展在现代网页开发中,HTML负责结构,CSS负责样式,而JavaScript由Brendan Eich于1995年在网景公司开发,最初JavaScript则负责交互与行为这三种技术的结合被称为前名为Mocha,后改名为LiveScript,最终定名为端三剑客,共同构成了丰富多彩的网页体验JavaScriptJavaScript作为唯一的网页编程语言,赋予了静态网页动态从简单的表单验证工具发展至今,JavaScript已成为世界上交互的能力,是实现网页富应用的核心技术最流行的编程语言之一,不仅能在浏览器中运行,还可通过Node.js在服务器端执行的应用场景JavaScript网页交互作为网页的灵魂,JavaScript可实现表单验证、动态内容加载、动画效果等交互功能,极大提升用户体验现代网站几乎不可能没有JavaScript的参与移动端开发通过React Native、Ionic等框架,JavaScript能够开发接近原生体验的移动应用一套代码可同时运行在iOS和Android平台,大大提高了开发效率服务器端开发借助Node.js运行时环境,JavaScript突破了浏览器的限制,可以直接在服务器上运行,处理HTTP请求、操作数据库、进行文件操作等,实现全栈开发工作原理JavaScript解释型语言浏览器环境JavaScript是一种解释型语言,代在浏览器中,JavaScript引擎(如码在运行时逐行被解释执行,无需Chrome的V
8、Firefox的预先编译成机器码这使得开发过SpiderMonkey)负责解析和执行程更为灵活,但执行速度可能相对代码浏览器提供DOM和BOM较慢API,使JavaScript能够操作网页元素和浏览器功能现代浏览器采用即时编译(JIT)技术,在运行时将热点代码编译成机器码,大幅提升执行效率Node.js环境Node.js基于Chrome的V8引擎,提供了非阻塞I/O和事件驱动机制,使JavaScript可以高效处理并发请求,适合开发高性能的网络应用第一个程序JavaScript创建HTML文件首先创建一个基本的HTML文件结构,这将作为我们JavaScript代码的容器编写JavaScript代码在HTML中插入script标签,编写简单的alertHello,World!或console.logHello,World!语句在浏览器中运行保存文件并在浏览器中打开,观察JavaScript执行结果变量与数据类型1var声明传统变量声明方式,存在变量提升特性不推荐在现代代码中使用,除非有特殊需求例如var name=张三;2let声明ES6引入的块级作用域变量声明,更安全且可预测可以重新赋值但不能重复声明例如let age=25;3const声明用于声明常量,赋值后不能更改引用(但对象内容可修改)推荐优先使用const,确保代码稳定性例如const PI=
3.14159;复合数据类型与类型判断对象(Object)无序属性的集合,通过键值对存储数据例如const person={name:小明,age:20};数组(Array)有序元素的集合,通过索引访问例如const fruits=[苹果,香蕉,橙子];函数(Function)可执行的代码块,JavaScript中函数也是对象例如function greet{return你好;}typeof操作符用于检查变量类型的操作符,返回表示类型的字符串例如typeof42返回number基本运算符运算符类型示例说明算术运算符+,-,*,/,%,**用于数值计算,其中**表示幂运算赋值运算符=,+=,-=,*=,/=将右侧值赋给左侧变量比较运算符==,===,!=,!==,,,=,=比较两个值并返回布尔结果逻辑运算符,||,!用于组合条件判断条件控制语句if...else语句switch...case语句if条件{switch表达式{//条件为真时执行case值1:}else if另一条件{//表达式等于值1时执行//第一个条件为假,另一条件为真时执行break;}else{case值2://所有条件为假时执行//表达式等于值2时执行}break;default://没有匹配值时执行}if语句根据条件的真假决定执行路径,可以嵌套使用复杂条件判断时,建议使用括号明确优先级switch适合对同一个变量进行多值匹配不要忘记break语句,否则会发生穿透现象循环控制语句for循环while循环最常用的循环形式,适合已知迭代次条件为真时持续执行,适合未知迭代数的场景语法for初始化;条件;次数的场景语法while条件递增{...}{...}break与continue do...while循环break跳出整个循环,continue跳过至少执行一次代码块,然后在条件为当前迭代继续下一次合理使用可提真时继续语法do{...}while条高代码效率件;函数定义与调用函数声明function函数名参数1,参数2{return结果;}函数表达式const函数名=function参数1,参数2{return结果;}函数调用函数名实参1,实参2;函数是JavaScript中的一等公民,可以作为参数传递、赋值给变量或作为返回值参数可设默认值(ES6特性),如functiongreetname=访客{...}函数不指定返回值时默认返回undefinedJavaScript支持可变参数,通过arguments对象或rest参数(...args)访问箭头函数及匿名函数箭头函数简写=表达式或={语句块}词法作用域this箭头函数没有自己的this,使用外层作用域的this匿名函数应用常用于回调函数、事件处理和一次性函数箭头函数是ES6引入的简洁函数语法,特别适合简短的单行函数表达式当只有一个参数时,可省略括号;当只有一条返回语句时,可省略花括号和return关键字箭头函数与普通函数的重要区别是没有自己的this、arguments、super或new.target绑定这使得箭头函数在回调函数中特别有用,不必担心this指向问题作用域与变量提升全局作用域在函数外部定义的变量,整个程序都可访问函数作用域在函数内部定义的变量,只在函数内可访问块级作用域使用let/const定义的变量,只在当前代码块内可访问变量提升var声明会提升到当前作用域顶部,但赋值不会提升JavaScript采用词法作用域(静态作用域),变量的作用域在定义时确定,而非运行时作用域链是指当访问变量时,先在当前作用域查找,若未找到则向上层作用域查找,直到全局作用域变量提升是JavaScript的一个特性,var声明和函数声明会被提升到当前作用域顶部let和const不会被提升,存在暂时性死区,在声明前访问会报错对象()的创建与操作Object对象字面量最直接的对象创建方式const person={name:王五,age:30,greet{return你好;}};构造函数使用new关键字创建对象function Personname,age{this.name=name;this.age=age;}const person=new Person李四,25;工厂函数返回新对象的函数function createPersonname,age{return{name,age};}const person=createPerson张三,20;属性操作点语法obj.property或方括号语法obj[property];删除deleteobj.property数组()的使用Array数组创建数组访问高阶函数//字面量语法//通过索引访问元素//forEach遍历const fruits=[苹果,香蕉,const firstFruit=fruits
[0];fruits.forEachitem=橙子];//苹果console.logitem;//构造函数语法//修改元素//map转换const numbers=new Array1,fruits
[1]=梨;const upperFruits=2,3,4;fruits.mapf=//数组长度f.toUpperCase;//创建指定长度的空数组const length=fruits.length;const emptyArray=new//filter过滤Array5;const filtered=numbers.filtern=n2;深入数组方法栈与队列操作JavaScript数组可以模拟栈和队列的行为•push向数组末尾添加元素,返回新长度•pop移除并返回数组最后一个元素•shift移除并返回数组第一个元素•unshift向数组开头添加元素,返回新长度数组切片与拼接这些方法不修改原数组,而是返回新数组•slicestart,end提取部分数组,不包括end索引•concat合并多个数组,返回新数组数组修改直接修改原数组的方法•splicestart,deleteCount,...items从指定位置删除或添加元素•reverse反转数组元素顺序•sort对数组元素进行排序字符串()操作String39创建方式常用方法字符串可通过单引号、双引号或反引号(模板字符串)创JavaScript字符串提供多种操作方法,如查找、替换、提建取等62字符集编码JavaScript使用UTF-16编码,支持全球语言字符和emoji方法功能示例length获取字符串长度你好.length//2substringstart,end提取子字符串JavaScript.substring0,4//Javasplitseparator分割为数组a,b,c.split,//[a,b,c]replacesearch,replacement替换字符串Hello.replaceH,h//hello日期与时间对象创建Date对象获取日期成分•当前时间new Date•getFullYear获取年份•指定日期new Date2023-•getMonth获取月份0-1101-01•getDate获取日1-31•时间戳new•getDay获取星期0-6Date1609459200000•getHours、getMinutes、•年月日时分秒newgetSecondsDate2023,0,1,0,0,0设置日期成分•setFullYear设置年份•setMonth设置月份•setDate设置日•setHours、setMinutes、setSeconds对象与常用方法Math随机数生成Math.random返回0到1之间的随机小数生成范围随机数Math.floorMath.random*max-min+1+min取整操作Math.round四舍五入取整Math.floor向下取整(小于等于)Math.ceil向上取整(大于等于)数学计算Math.abs绝对值Math.powx,y x的y次方Math.sqrt平方根Math.max、Math.min最大值、最小值异常处理try块包含可能出错的代码如果发生错误,执行立即转到catch块catch块捕获并处理try块中抛出的错误error参数包含错误信息finally块无论是否发生错误都会执行的代码通常用于清理资源throw语句手动抛出自定义错误可抛出Error对象或任意值异常处理是程序健壮性的关键通过try-catch结构,我们可以捕获并优雅地处理运行时错误,防止程序崩溃finally块无论如何都会执行,常用于资源释放等清理操作可以使用throw语句抛出自定义错误,创建更有意义的错误信息throw newError自定义错误信息错误类型包括Error、SyntaxError、TypeError、ReferenceError等新特性ES6模板字符串解构赋值使用反引号(`)定义,支持简洁地从数组或对象中提取多行文本和变量插值例值例如const{name,块级作用域如`Hello,${name}!`age}=person;扩展运算符let和const引入了块级作用使用...展开数组或对象例域,解决了var的变量提升问如const newArray=题[...array1,...array2];模块化基础概念传统问题早期JavaScript缺乏模块系统,导致命名冲突、依赖管理困难和代码组织混乱模块化方案ES6引入原生模块系统,使用import和export关键字管理代码模块导出语法export默认导出export defaultfunction{};命名导出export constname=value;导入语法导入默认import myFuncfrom./module.js;导入命名import{name,age}from./module.js模块化开发是现代JavaScript的基础,它有助于代码复用、维护和团队协作ES6模块系统是静态的,这意味着导入和导出在编译时确定,而不是运行时,有利于静态分析和优化简介DOMHTML/CSS构建网页的基本结构和样式DOM将HTML文档表示为节点树的接口JavaScript操作DOM节点,实现动态交互文档对象模型(DOM)是HTML和XML文档的编程接口,它将网页表示为一个节点树浏览器解析HTML后,会创建DOM树,JavaScript可以通过DOMAPI操作这些节点,从而动态修改网页内容、结构和样式DOM中常见的节点类型包括文档节点(Document)、元素节点(Element)、文本节点(Text)和属性节点(Attribute)每种节点类型都有特定的属性和方法,用于读取或修改节点信息浏览器渲染引擎(如Webkit、Gecko、Blink)负责将DOM和CSS转换为可视化页面当DOM或CSS发生变化时,浏览器会重新计算布局并重绘页面常用节点操作DOM选择元素•getElementById通过ID选择单个元素•getElementsByTagName通过标签名选择多个元素•getElementsByClassName通过类名选择多个元素•querySelector使用CSS选择器选择第一个匹配元素•querySelectorAll使用CSS选择器选择所有匹配元素创建和插入•createElement创建新元素节点•createTextNode创建文本节点•appendChild将节点添加到父节点末尾•insertBefore在指定节点前插入新节点修改和删除•innerHTML读取或设置元素内HTML•textContent读取或设置元素文本内容•setAttribute设置属性值•removeChild移除子节点•replaceChild替换子节点事件机制基础事件基本概念事件是用户或浏览器触发的行为,如点击、加载、输入等JavaScript可以通过事件监听机制响应这些行为,实现交互功能事件监听方法addEventListener是添加事件监听器的标准方法,接受三个参数事件类型、处理函数和捕获/冒泡选项事件对象事件处理函数自动接收事件对象参数,包含事件相关信息,如事件类型、目标元素和鼠标位置等事件流DOM事件传播包括三个阶段捕获阶段(从顶层向下)、目标阶段(到达目标元素)和冒泡阶段(从目标元素向上)常见浏览器事件UI事件表单事件事件处理方法•load页面加载完成时触发•submit表单提交时触发•preventDefault阻止默认行为•unload页面卸载时触发•reset表单重置时触发•stopPropagation阻止事件冒泡•resize窗口大小改变时触发•input输入框值变化时触发•removeEventListener移除事件监听器•scroll页面滚动时触发•change元素值改变且失去焦点时触发•focus/blur获得/失去焦点时触发鼠标与键盘事件鼠标事件键盘事件事件名触发条件事件名触发条件click鼠标单击元素keydown键盘按键按下dblclick鼠标双击元素keyup键盘按键释放mousedown鼠标按键按下keypress键盘按键按下(仅字符键)mouseup鼠标按键释放键盘事件对象的重要属性mouseover鼠标移入元素•key按下的键名•keyCode按键的ASCII码(已废弃)mouseout鼠标移出元素•code物理按键的标识符mousemove鼠标在元素内移动•ctrlKey、shiftKey、altKey是否按下修饰键表单验证与交互获取表单元素通过DOM选择器获取表单及其元素document.forms、getElementById、querySelector等获取与设置值使用value属性获取或设置表单元素的值;对于复选框和单选框,使用checked属性验证表单数据使用JS验证用户输入正则表达式匹配、长度检查、类型验证等处理表单提交监听submit事件,验证通过后提交,或阻止默认行为使用AJAX异步提交操作样式与类直接修改样式类名操作通过element.style对象可以直接设置元素的内联样式通过className属性可以读取或设置元素的完整类名element.style.color=red;//替换所有类element.style.fontSize=18px;element.className=new-class;element.style.backgroundColor=#f0f0f0;//添加类(简单方式)element.className+=another-class;注意CSS属性名在JavaScript中使用驼峰命名法,如fontSize对应font-sizeclassList API现代浏览器提供classList对象,更方便地操作类//添加类element.classList.addactive;//移除类element.classList.removedisabled;//切换类(有则移除,无则添加)element.classList.togglehighlight;//检查是否包含某个类element.classList.containsselected;定时器与延迟执行setTimeout setIntervalsetTimeout用于在指定延迟后执行一次代码setInterval用于按指定时间间隔重复执行代码//基本语法//基本语法const timeoutId=setTimeoutcallback,delay;const intervalId=setIntervalcallback,delay;//实例2秒后显示消息//实例每秒更新时间const id=setTimeout={const id=setInterval={console.log延迟执行了!;const now=new Date;},2000;timeElement.textContent=now.toLocaleTimeString;},1000;//取消定时器clearTimeoutid;//停止重复执行clearIntervalid;延迟以毫秒为单位可以传递额外参数给回调函数setTimeoutfn,delay,arg1,arg2,...注意如果回调函数执行时间超过间隔时间,可能导致函数调用堆叠数据解析与转换JSONJSON简介转换为JSON解析JSONJSON(JavaScript对象表示JSON.stringify方法将JSON.parse方法将JSON字法)是一种轻量级数据交换格JavaScript值转换为JSON字符符串解析为JavaScript对象式,易于人阅读和编写,也易串可选参数允许替换值或格可选参数允许转换值常用于于机器解析和生成它基于式化输出常用于将数据发送处理从服务器接收的数据JavaScript语法,但是独立于到服务器前的序列化编程语言//对象转JSON字符串const person={name:张三,age:30};const jsonString=JSON.stringifyperson;console.logjsonString;//输出{name:张三,age:30}//JSON字符串转对象const jsonStr={name:李四,age:25,skills:[JS,HTML,CSS]};const obj=JSON.parsejsonStr;console.logobj.name;//输出李四本地存储与CookieCookie localStorage最早的客户端存储机制,每次HTTP请求都会发送到服务永久存储机制,除非手动清除,否则数据将一直保留器容量小(4KB),可设置过期时间通过存储容量较大(5MB左右)适合存储不经常变化的数document.cookie读取和设置据安全考虑sessionStorage所有本地存储机制都不应存储敏感信息,因为它们不加3会话级存储,关闭标签页或浏览器后自动清除容量与密且可被恶意脚本访问localStorage相当适合存储临时会话数据//localStorage示例localStorage.setItemusername,王小明;//存储数据const user=localStorage.getItemusername;//读取数据localStorage.removeItemusername;//删除数据localStorage.clear;//清空所有数据//sessionStorage用法相同,但作用域和生命周期不同网页编程中的异步同步与异步回调函数同步执行意味着代码按顺序执行,每个操作完成后才开始下一个操作这在处理耗回调函数是异步编程的基础,它是一个传递给异步操作的函数,会在操作完成时被时任务时会阻塞用户界面,导致网页响应迟缓调用JavaScript中的许多操作都使用回调函数定时器、事件监听器、AJAX请求等异步执行允许启动一个操作后立即继续执行下一行代码,而不等待操作完成当操作完成时,通过回调机制处理结果这避免了阻塞,提高了网页的响应性//回调函数示例function fetchDatacallback{setTimeout={const data={name:商品数据};callbackdata;//操作完成后调用回调},2000;}fetchDatafunctionresult{console.log获取到数据:,result;};console.log请求已发送,继续执行其他操作;回调地狱(Callback Hell)是深度嵌套回调函数导致的代码难以阅读和维护的问题现代JavaScript提供了Promise和async/await等机制来解决这个问题Promise基础Pending FulfilledRejected链式调用初始状态,既不是成功也不是失败操作成功完成,调用resolve操作失败,调用reject then/catch方法返回新PromisePromise是一种处理异步操作的对象,表示一个尚未完成但预计将来会完成的操作它解决了回调地狱问题,使异步代码更易于理解和维护Promise有三种状态等待(pending)、已完成(fulfilled)和已拒绝(rejected)//创建一个Promiseconst promise=new Promiseresolve,reject={//异步操作const success=true;if success{resolve操作成功;//成功时调用}else{reject操作失败;//失败时调用}};//处理Promise结果promise.thenresult={console.logresult;//处理成功情况return处理后的数据;}.thendata={console.logdata;//链式处理}.catcherror={console.errorerror;//处理错误情况}.finally={console.log操作完成;//无论成功失败都执行};async/await用法async函数声明在函数前添加async关键字,使其返回Promiseawait表达式只能在async函数内使用,暂停执行直到Promise解决错误处理3使用try/catch捕获await表达式中的异常async/await是ES2017引入的语法糖,建立在Promise之上,使异步代码看起来和同步代码类似,提高了可读性和可维护性async函数总是返回一个Promise,await关键字只能在async函数内部使用//基本用法async functionfetchUserData{try{//await后面必须是Promiseconst response=await fetchhttps://api.example.com/user;//这行代码会等待上面的Promise完成后执行const userData=await response.json;console.loguserData;return userData;//自动包装为Promise}catch error{console.error获取用户数据失败:,error;throw error;//重新抛出错误}}//调用async函数fetchUserData.thendata={console.log处理返回的数据,data;};Ajax与前端请求创建XMLHttpRequest对象传统AJAX的核心,用于与服务器交换数据而无需重新加载页面配置请求设置请求方法(GET/POST等)、URL和异步标志发送请求发送请求到服务器,可选携带数据(POST请求)处理响应监听状态变化,解析返回数据,更新页面内容现代开发中,Fetch API提供了一个更强大和灵活的方式来发起网络请求它基于Promise,简化了异步操作处理,接口更加直观//Fetch API示例fetchhttps://api.example.com/data.thenresponse={if!response.ok{throw newError网络响应不正常;}return response.json;}.thendata={console.log获取的数据:,data;//处理数据...}.catcherror={console.error获取数据出错:,error;};跨域与同源策略同源策略跨域解决方案浏览器的安全机制,限制一个源(协议+域名+端口)的页面不能与另一个•CORS跨域资源共享服务端设置HTTP头允许跨域请求源的资源进行交互目的是防止恶意网站读取其他网站的敏感数据•JSONP利用script标签不受同源策略限制的特性同源策略会阻止跨域AJAX请求、操作跨域的DOM、读取跨域的•代理服务器浏览器请求同源服务器,后者转发到目标服务器Cookie/LocalStorage等•PostMessage API允许不同源的窗口安全通信•WebSocket通信协议不受同源策略影响简单网页交互案例一颜色切换器界面设计JavaScript实现效果增强创建一个简单的HTML结构,包含一个使用document.querySelector选择元添加CSS过渡效果使颜色变化更平滑显示区域和多个颜色按钮每个按钮代素,添加事件监听器响应点击事件点扩展功能添加自定义颜色输入、随机表一种颜色,点击后将改变显示区域的击按钮时,获取按钮的data-color属性颜色生成按钮、保存颜色方案到背景色值,并设置到显示区域的localStorage等backgroundColor样式属性简单网页交互案例二倒计时创建HTML结构设计一个包含显示区域和控制按钮的界面,用于显示倒计时时间和控制倒计时开始/暂停/重置实现计时逻辑使用setInterval创建定时器,每秒更新一次倒计时显示计算剩余时间并格式化为时:分:秒格式添加控制功能实现开始、暂停和重置功能开始按钮启动定时器,暂停按钮清除定时器,重置按钮恢复初始值添加完成通知倒计时结束时播放声音或显示提示信息,可使用Audio API播放提示音或显示弹窗通知用户简单网页交互案例三表单校验显示错误信息编写验证逻辑当验证失败时,以用户友好的方式显示错误信息创建表单为每个字段创建验证函数,检查输入是否符合要可以设计一个包含多种输入字段的表单,如用户名、密求常用的验证包括•在输入字段下方显示错误文本码、邮箱、手机号等每个字段需要不同的验证规•非空检查确保必填字段已填写•将输入框边框变为红色则•长度检查验证输入是否符合最小/最大长度•使用图标标示错误字段•使用适当的input类型(text、email、要求password、tel等)•设置焦点到第一个错误字段•格式检查使用正则表达式验证邮箱、手机号•添加placeholder提示用户输入格式等特定格式•为每个输入字段设置合理的id和name属性•一致性检查确认密码与重复密码是否一致常见网页特效实例下拉菜单动态弹窗图片轮播创建交互式导航菜单,鼠标悬停或点击实现可被触发显示的模态对话框点击创建自动滚动的图片轮播,展示多张图时显示子菜单实现方法包括使用按钮显示弹窗,点击关闭按钮或背景区片可添加左右箭头控制和指示器导CSS:hover伪类或JavaScript事件处域关闭弹窗使用fixed定位使弹窗居航使用setInterval实现自动播放,鼠理添加过渡效果使菜单展开/收起更中,添加半透明背景遮罩防止用户操作标悬停时暂停CSS过渡或动画使切换流畅页面其他部分更平滑响应式网页开发简述什么是响应式设计媒体查询与JavaScript配合响应式网页设计是一种使网页能够自动适应不同设备屏幕尺寸和分辨率的方法一个响应式网媒体查询是CSS3的一个功能,允许基于屏幕宽度等条件应用不同的样式站在桌面电脑、平板和手机上都能提供良好的用户体验,不需要为每种设备创建单独的版本@media max-width:768px{/*平板和手机样式*/响应式设计的核心原则包括}•流式布局使用相对尺寸(如百分比)而非固定像素•弹性媒体图片和视频能够自动缩放@media min-width:769px andmax-width:1200px{/*桌面样式*/•媒体查询基于设备特性应用不同的样式}JavaScript可以补充媒体查询,实现更复杂的响应式行为//监听窗口尺寸变化window.addEventListenerresize,function{if window.innerWidth=768{//移动设备行为}else{//桌面设备行为}};前端开发工具与调试控制台(Console)断点调试浏览器的开发者工具中,Console面板是Sources面板允许设置断点,逐步执行代最常用的调试工具可以查看日志信息、码,检查变量值调试器提供了强大的功错误警告、执行JavaScript代码和评估表能来分析代码执行流程和状态达式•断点类型行断点、条件断点、DOM•console.log输出普通信息断点等•console.error输出错误信息,带•调试操作继续执行、单步执行、进红色标记入函数、跳出函数•console.warn输出警告信息,带•观察表达式监视特定变量或表达式黄色标记的值•console.table以表格形式显示数组或对象性能监控Performance面板帮助识别和解决性能瓶颈,记录页面加载和交互过程,分析执行时间和内存使用•时间线记录显示各类事件的时间分布•性能指标FPS、CPU使用率、内存消耗•优化建议识别长任务和渲染瓶颈主流前端框架介绍React VueAngular由Facebook开发的声明式UI库,以组件渐进式JavaScript框架,以简单易学和灵由Google维护的全功能框架,提供完整化开发和虚拟DOM闻名React采用单活性著称Vue结合了React和Angular的前端解决方案Angular使用向数据流,使用JSX语法将HTML与的优点,提供了模板语法、响应式数据TypeScript开发,采用双向数据绑定和JavaScript混合适合构建单页应用绑定和组件系统它的核心库只关注视依赖注入它包含丰富的内置功能如表(SPA)和复杂的用户界面其强大的生图层,易于集成到现有项目Vue的官方单处理、HTTP客户端和路由Angular态系统包括Redux状态管理和React生态包括Vuex状态管理和Vue Router路适合大型企业级应用,但学习曲线较陡Native跨平台开发由管理峭高级特性JavaScript闭包原型与原型链闭包是函数和其词法环境的组合,允许函数访问其定义时的作用域中的变量,即使在JavaScript是基于原型的语言,对象可以从其他对象继承属性每个对象都有一个隐藏函数执行时这些变量已经不在当前作用域中的[[Prototype]]属性,指向其原型对象访问对象属性时,如果对象本身没有该属性,JavaScript会沿着原型链查找function createCounter{let count=0;//私有变量//构造函数function Personname{return function{this.name=name;count++;//访问外部函数的变量}return count;};//在原型上添加方法}Person.prototype.greet=function{return`你好,我是${this.name}`;const counter=createCounter;};console.logcounter;//1console.logcounter;//2const person=new Person李华;console.logperson.greet;//你好,我是李华闭包常用于创建私有变量、数据封装和实现函数工厂但过度使用可能导致内存泄漏,因为被引用的变量不会被垃圾回收原型链是JavaScript实现继承的机制ES6的class语法提供了更清晰的面向对象编程方式,但底层仍然基于原型设计模式初步单例模式工厂模式观察者模式确保一个类只有一个实例,并提供全局访问点常用于管理共享资源,定义一个创建对象的接口,让子类决定实例化哪个类工厂方法使一个定义对象间的一种一对多依赖关系,使得当一个对象状态改变时,所有如配置管理、数据库连接类的实例化延迟到其子类依赖于它的对象都会得到通知const Singleton=function{function UserFactory{//简易实现let instance;this.createUser=functiontype,name{class EventEmitter{let user;constructor{function createInstance{this.events={};return{if type===admin{}//实例属性和方法user=new Adminname;data:[],}else iftype===regular{onevent,listener{addItemitem{user=new RegularUsername;if!this.events[event]{this.data.pushitem;}this.events[event]=[];}}};return user;this.events[event].pushlistener;}};}}return{emitevent,...args{getInstance:function{//使用if this.events[event]{if!instance{const factory=new UserFactory;this.events[event].forEachlistener={instance=createInstance;const admin=factory.createUseradmin,管理员;listener...args;}};return instance;}}}};}};const instance1=Singleton.getInstance;const instance2=Singleton.getInstance;console.loginstance1===instance2;//true代码风格与规范命名约定注释规范良好的命名是可读性的基础,JavaScript通常遵循以下命名约定注释应该解释代码的为什么,而不仅仅是是什么•变量和函数名使用驼峰命名法(camelCase)•单行注释解释变量用途或简单逻辑•类名和构造函数使用帕斯卡命名法(PascalCase)•多行注释解释复杂算法或实现决策•常量使用全大写和下划线(UPPER_SNAKE_CASE)•文档注释(JSDoc)描述函数参数、返回值和用法•私有属性/方法以下划线开头(_privateMethod)/**选择有意义的名称,体现变量用途或函数功能,避免使用单字母变量名(除了循环变量i、j、k*计算两点之间的距离等)*@param{Object}point1-第一个点坐标{x,y}*@param{Object}point2-第二个点坐标{x,y}*@returns{number}两点之间的距离*/function calculateDistancepoint1,point2{//使用勾股定理计算距离return Math.sqrtMath.powpoint
2.x-point
1.x,2+Math.powpoint
2.y-point
1.y,2;}代码规范工具如ESLint可以自动检查和修复风格问题,建议在项目中配置遵循团队一致的代码风格更重要than坚持特定规范安全与防护跨站脚本攻击(XSS)XSS攻击是指攻击者将恶意代码注入到网页中,当用户浏览页面时执行常见类型包括•存储型XSS恶意代码存储在数据库中,所有浏览页面的用户都会受到攻击•反射型XSS恶意代码包含在URL参数中,点击链接时触发•DOM型XSS在客户端JavaScript中处理不安全的数据防御措施输入过滤、输出编码、使用textContent而非innerHTML、Content-Security-Policy头部跨站请求伪造(CSRF)CSRF攻击利用用户已登录的会话,诱导用户执行非意愿的操作例如,通过伪装成正常链接或图片,实际触发了敏感操作的请求防御措施使用CSRF令牌、验证Referer头、使用SameSite Cookie、要求重要操作二次确认其他安全最佳实践•使用HTTPS保护数据传输•实施内容安全策略(CSP)•正确设置Cookie属性(HttpOnly、Secure、SameSite)•定期更新依赖库,修复已知漏洞•避免在客户端存储敏感信息•实施适当的错误处理,不泄露敏感信息学习资源与社区学习网站开发者社区推荐书籍•MDN WebDocs最全面的•GitHub代码托管平台,可以学•《JavaScript高级程序设计》经JavaScript文档资源习优秀开源项目典全面的入门书•W3School中文网入门级教程和•Stack Overflow编程问答社区•《你不知道的JavaScript》系列参考深入理解语言机制•掘金、知乎中文技术交流平台•JavaScript.info现代JavaScript•《JavaScript语言精粹》了解•前端早读课微信公众号,分享前教程JavaScript精华部分端最新动态•慕课网、极客时间中文视频教程•《ES6标准入门》系统学习ES6•CSS-Tricks CSS和JavaScript技平台新特性巧网站•FreeCodeCamp免费编程学习平•《JavaScript设计模式与开发实台践》学习设计模式•掘金、SegmentFault中文技术社区课程总结与答疑语言基础DOM操作变量、数据类型、运算符、条件控制、循环、函选择、创建、修改元素,事件处理,样式操作数4应用开发异步编程交互效果、表单验证、数据存储、框架应用回调函数、Promise、async/await,网络请求通过本课程的学习,你已经掌握了JavaScript的核心概念和Web编程的基本技能从基础语法到DOM操作,从事件处理到异步编程,这些知识构成了现代Web开发的基石记住,编程能力需要通过持续实践来提升建议开始构建小型项目,逐步应用所学知识,遇到问题时查阅文档和社区资源前端技术发展迅速,保持学习的习惯,关注新技术动态,将使你在Web开发领域保持竞争力最后,欢迎提问,分享你在学习过程中遇到的困惑或想深入了解的话题。
个人认证
优秀文档
获得点赞 0