还剩48页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
基础教程JavaScript欢迎来到基础教程,这是一门为零编程基础学习者精心设计的互JavaScript动式入门课程本教程涵盖了个实用知识点和配套练习,完全符合502025年最新开发标准无论您是想要入门开发,还是希望提升自己的前Web Web端技能,这门课程都将为您提供扎实的基础JavaScript通过系统学习本教程,您将能够理解的核心概念,掌握基本语法,JavaScript并学会如何应用这些知识解决实际问题让我们一起开始这段编程之旅吧!课程概述学习目标掌握基础语法与编程概念,能独立开发简单的交互式网页,为进JavaScript阶学习打下坚实基础前置知识需了解基本的和知识,能够创建简单的网页结构和样式如果您已HTML CSS经掌握这些技能,将使学习过程更加顺畅学习方法采用理论结合实践的方式,每个知识点后都有配套练习,建议立即动手编码,加深理解与记忆学习时间预计总学习时间为小时,建议每天学习小时,坚持周可完成全部201-22-3内容简介JavaScript起源与发展广泛应用创建于年,如今,已成为全JavaScript1995JavaScript由网景公司的球最流行的编程语言之一,被Brendan Eich在短短十天内开发完成最初以上的网站采用它已95%被命名为,后改名为经从简单的脚本语言发展成为Mocha,最终定名为功能强大的全栈开发语言LiveScript,这是一个与JavaScript完全无关的营销策略Java跨平台特性不仅限于浏览器环境,通过,它已经进入服务器JavaScript Node.js端编程领域此外,它还被用于移动应用开发、桌面应用程序甚至物联网设备与的区别JavaScript JavaJavaScript Java脚本语言,直接在浏览器中解释执行编译语言,需要先编译成字节码再执行主要用于前端开发,增强用户交互体验广泛应用于企业级应用、开发等Web Android弱类型语言,变量类型可以动态改变强类型语言,变量类型一旦定义不可改变基于原型的面向对象编程基于类的面向对象编程由国际组织标准化维护由公司维护开发ECMA Oracle尽管名称相似,但和是两种完全不同的编程语言,它们的设计理念、用途和语法结构都有很大差异名称相似纯粹是JavaScriptJava历史上的营销决策,目的是借助当时已经流行的语言的名气Java开发环境设置浏览器推荐使用或这些浏览器提供强大的开发者工具,按可Chrome FirefoxF12打开开发控制台,用于调试和测试代码JavaScript代码编辑器推荐使用或这些编辑器提供语法高亮、Visual StudioCode SublimeText代码自动完成和丰富的插件生态系统,大大提高开发效率在线平台如果不想安装软件,可以使用、或等在线JSFiddle CodePenCodeSandbox编程平台这些平台提供即写即看的编码环境,非常适合初学者设置好开发环境后,尝试在浏览器控制台输入简单的代码,如JavaScript,看是否能正确执行,以验证环境配置是否成功`console.logHello World`基本语法第一个程JavaScript序创建文件HTML首先创建一个基本的文件,包含必要的、和标签HTML htmlhead body这将作为我们代码的宿主环境JavaScript添加代码JavaScript在中添加标签,可以将其放在或中推荐放在HTML scripthead body结束标签前,以确保元素已加载完毕body HTML编写程序Hello World在标签中添加以下代码,保存script`console.logHello,World!`文件并在浏览器中打开,按查看控制台输出F12也可以使用外部文件,创建一个文件,然后在中使用JavaScript.js HTMLscript脚本路径引入这种方法有利于代码分离和维护,是实际开发中的src=/script常用做法变量声明var let最早的变量声明方式,存在变量提升现引入的块级作用域变量声明ES6象变量仅在声明的代码块内有效,如语句、if声明的变量作用域为函数级,如果在函循环等for数外声明则为全局变量不允许在同一作用域内重复声明,有助可以重复声明同名变量,容易导致意外于避免变量污染错误const用于声明常量,其值一旦设定就不能更改与一样具有块级作用域特性let对于复杂数据类型(如对象、数组),常量只保证引用不变,内部属性可修改现代推荐使用和,尽量避免使用变量命名应遵循驼峰命名法JavaScript let const var(),避免使用保留字,名称应具有描述性良好的变量命名习惯可以让代码更camelCase易读、易维护数据类型基本类型包含五种基本数据类型类型用于表示整数和浮点数;类型用于文本数据;类型只有和两个值;表示变量JavaScript NumberString Booleantrue falseundefined已声明但未赋值;表示空值或不存在的对象;是引入的用于创建唯一标识符的类型null SymbolES6是弱类型语言,变量的类型由赋给它的值决定,同一变量可以在不同时刻保存不同类型的值使用运算符可以检查变量的类型JavaScript typeof数据类型复杂类型对象Object由键值对组成的集合,可以存储各种类型的数据创建方法`let obj=张三访问属性可以使用点符号()或方括{name:,age:25};`obj.name号()obj[name]数组Array有序的值的集合,可以存储任意类型的数据创建方法字符`let arr=[1,串通过索引访问元素,true,{key:value}];``arr
[0]`函数Function可执行的代码块,在中函数也是对象创建方法JavaScript`function函数可以作为参数传递,也可myFuncparam{return param*2;}`以作为返回值日期Date用于处理日期和时间的对象创建方法提供`let today=new Date;`了多种方法获取和设置日期时间组件类型转换显式转换隐式转换使用专门的转换函数主动进行类型转换在特定场景下自动进行的类型转换JavaScript将值转换为数字算术运算时自动转换为数字•Number•将值转换为字符串字符串连接时自动转换为字符串•String•将值转换为布尔值逻辑操作时自动转换为布尔值•Boolean•解析字符串并返回整数比较操作时根据情况转换类型•parseInt•解析字符串并返回浮点数•parseFloat类型转换是中容易出错的地方例如,结果是字符串,而结果是数字理解这些转换规则对避JavaScript`5+2`52`5-2`3免代码中的逻辑错误至关重要建议尽量使用显式转换,让代码意图更加明确运算符算术运算符运算符名称功能示例加法两数相加或字符串连接+5+2=7减法从第一个数减去第二个数-5-2=3乘法两数相乘*5*2=10除法第一个数除以第二个数/5/2=
2.5取余返回除法的余数%5%2=1递增将变量值加现在是++1let x=5;x++;//x6递减将变量值减现在是--1let x=5;x--;//x4指数计算底数的指数次幂**2**3=8在使用递增和递减运算符时,需要注意前置和后置的区别前置形式会先增加变量的值,然后返回增加后的值;后置形式会先返回变量的原始值,然后再增加变量的值++--++x x++运算符比较运算符相等运算符不等运算符大小比较等于比较两个值是否相等,会进不等于比较两个值是否不相等,小于、大于比较两个值的大小==!=行类型转换例如返回会进行类型转换例如返回关系5==55!=5true false小于等于、大于等于比较==严格等于比较两个值是否相等严格不等于比较两个值是否不两个值的大小关系,包括相等的情况===!==且类型是否相同例如返相等或类型是否不同例如5===55!==5回返回false true在实际开发中,推荐使用严格相等和严格不等运算符,这样可以避免因类型转换导致的意外结果比如会返回,但===!==0==false true0会返回,后者更符合逻辑预期===false false运算符逻辑运算符逻辑或||当至少有一个操作数为时返回,否则返回true truefalse例如返回,返回true||false true false||false逻辑与false逻辑非!当所有操作数都为时返回,否则返回true true false对操作数取反,变为,变为truefalse false true例如返回,truetrue truetruefalse返回例如返回,返回false!truefalse!false true中的逻辑运算符还具有短路求值的特性对于运算符,如果第一个操作数为,则不会评估第二个操作数;对于运算符,如果第一个操作数为,则JavaScriptfalse||true不会评估第二个操作数这种特性常用于条件判断和默认值设置运算符赋值运算符条件语句语句if简单语句if条件语句块1if{}语句if...else2条件语句块语句块if{1}else{2}语句if...else if...else3条件语句块条件语句块语句块if1{1}else if2{2}else{3}语句用于根据条件执行不同的代码块条件表达式会被转换为布尔值,将下列值视为、、空字符串、、if JavaScriptfalsefalse0null和,其他值都视为undefined NaNtrue多个条件可以用逻辑运算符组合,例如允许入场嵌套的语句也是可行的,但过多嵌套会降低代码可读性,建议if age=18hasID{}if适度使用或考虑语句作为替代switch条件语句语句switch定义表达式表达式switch{...}设置匹配项值语句case1:1;break;设置默认情况默认语句default:;语句用于基于不同条件执行不同动作,适合有多个固定值的情况它使用严格相等比较表达式与值每个后应有switch===case case语句,否则会继续执行下一个的代码称为穿透break case相比多重语句,语句结构更清晰,执行效率也可能更高然而,只能做相等比较,不能像那样进行范围或逻辑比较if switchswitch if子句是可选的,当没有匹配时执行default case条件语句三元运算符1基本语法2使用场景三元运算符使用问号和冒号组成条件表达式表达式三元运算符最适合简单的条件赋值和返回值场景例如1:2`let如果条件为真,返回表达式的值;如果条件为假,返回表达用一行代码获取两个数中的较大值1max=aba:b;`式的值23嵌套使用4最佳实践三元运算符可以嵌套使用,但容易降低代码可读性例如使用三元运算符时应保持简洁,复杂逻辑应使用语句适当`let if获取三个的括号和空格可以提高可读性避免嵌套超过两层的三元运算result=abaca:c:bcb:c;`数中的最大值符循环循环for初始化条件判断设置初始计数器值检查循环继续条件更新计数器循环体递增或递减计数器执行代码块循环是中最常用的循环结构之一,其语法为初始化条件更新循环体初始化表达式只在循环开始前执行一次;条件for JavaScriptfor;;{}表达式在每次迭代前评估,为时退出循环;更新表达式在每次迭代后执行false循环体内可以使用语句提前退出循环,也可以使用语句跳过当前迭代的剩余部分嵌套循环可以处理多维数据,但要注意使用不break continuefor同的计数器变量名以避免冲突循环和while do...while循环循环while do...while基本语法基本语法while条件{do{//循环体//循环体}}while条件;特点特点先检查条件,再执行循环体先执行循环体,再检查条件••如果初始条件为,循环体一次也不会执行循环体至少执行一次,即使条件一开始就是•false•false适用于迭代次数不确定的情况适用于至少需要执行一次的情况••无限循环是一种常见错误,即循环条件永远不会变为例如或忘记更新循环变量为避免无限循环,确保循环有false`whiletrue{}`明确的终止条件,并在循环体内有使条件最终变为的逻辑false循环和for...in for...of循环for...in遍历对象的可枚举属性(包括原型链上的属性)for letkey inobject{console.logkey,object[key];}注意事项不建议用于数组,因为可能以任意顺序遍历,且会遍历自定义属性循环for...of遍历可迭代对象(如数组、字符串、、等)的值Map Setforlet valueof iterable{console.logvalue;}注意事项不能直接用于普通对象,除非实现了迭代器协议选择适当的循环方式可以让代码更简洁、更易读对于对象属性遍历,使用;对于数组元素遍历,使用或for...in for...of传统循环;对于既需要索引又需要值的情况,可以使用数组的方法配合循环for entriesfor...of在处理大型数据集时,循环的性能差异可能变得明显一般来说,传统循环性能最佳,但现代引擎已经大for JavaScript大优化了各种循环结构的性能函数基础函数声明使用关键字定义命名函数function函数名参数参数函数体function1,2,...{}函数表达式将匿名函数赋值给变量变量名参数参数函数体const=function1,2,...{};函数调用通过函数名加括号调用函数函数名参数值参数值1,2,...;函数是中的一等公民,可以像其他值一样被传递和操作函数可以有返回值使用JavaScript语句,如果没有明确返回,则默认返回参数是函数的输入,不returnundefined JavaScript检查参数数量,多余的参数会被忽略,缺少的参数值为undefined变量的作用域与函数密切相关在函数内部声明的变量只在函数内部可见局部变量,外部声明的变量在函数内部也可见全局变量内部变量会覆盖同名的外部变量,这称为变量遮蔽函数箭头函数箭头函数是引入的一种更简洁的函数语法,使用箭头定义基本语法为参数函数体当只有一个参数时,可以省ES6=={}略括号;当函数体只有一条返回语句时,可以省略花括号和关键字例如return constdouble=x=x*2;箭头函数与传统函数的主要区别在于的绑定规则箭头函数没有自己的,它继承自父作用域的值这解决了传统回调函数this this this中指向问题另外,箭头函数不能用作构造函数不能使用,没有对象,不能使用关键字thisnew argumentsyield函数参数处理默认参数值允许为函数参数设置默认值,当调用函数时不传该参数或传入时使用ES6undefined默认值访客你好,!function greetname={return`${name}`;}剩余参数使用语法将多个参数收集到一个数组中,必须是函数的最后一个参数...function sum...numbers{return numbers.reducea,b=a+b,0;}参数解构直接在参数位置解构对象或数组,使代码更简洁今年岁function introduce{name,age}{return`${name}${age}`;}对象arguments函数内部的类数组对象,包含所有传入的参数箭头函数没有此对象function log{forlet i=0;i函数闭包13闭包定义典型用例闭包是指函数能够记住并访问其词法作用域,即使该函数在其作用域数据封装、创建私有变量、函数工厂、延迟执行、回调函数等之外执行4性能考虑闭包会保留对外部变量的引用,可能导致内存泄漏,使用时需谨慎闭包是中一个强大而独特的特性一个简单的闭包示例JavaScriptfunction createCounter{let count=0;//私有变量return function{return++count;//访问并修改外部变量};}const counter=createCounter;console.logcounter;//1console.logcounter;//2在这个例子中,内部函数形成了一个闭包,它记住了变量,即使在函数执行完毕后每次调用都会增加并count createCountercounter返回值,而变量对外部代码是不可见的count count对象创建与访问对象字面量构造函数类语法Object.create ES6使用花括号直接创建对象,使用关键字和函数创基于现有对象作为原型创使用关键字创建对new class是最常用的方法建对象实例建新对象象模板const person=function Personname,const personProto=class Person李明你{name:,age:age{this.name={greet{return`{constructorname,好,我是30,greet{return`name;this.age=age;}age{this.name=你好,我是const person=new${this.name}`;}};name;this.age=李明${this.name}`;}};Person,30;const person=age;}}Object.createpersonProto;对象方法与this方法定义对象方法是属于对象的函数关键字this指向当前执行上下文的对象绑定规则默认绑定、隐式绑定、显式绑定、绑定new在中,的值取决于函数的调用方式,而非声明方式在对象方法中,指向调用该方法的对象;在全局函数中,指JavaScript thisthisthis向全局对象(浏览器中为);在事件处理函数中,指向触发事件的元素;在构造函数中,指向新创建的实例window thisthis可以使用、和方法显式设置函数执行时的值这三个方法的区别在于和立即调用函数,区别是参call applybind thiscall apply数传递方式不同;返回一个新函数,值固定为指定值,不立即执行箭头函数没有自己的,继承自外层作用域bind thisthis原型与继承原型链基础中的继承是通过原型链实现的每个对象都有一个内部链接指向另一个对象,JavaScript称为原型当试图访问对象的属性时,如果对象本身没有该属性,会在原型JavaScript上查找,然后是原型的原型,依此类推,形成原型链与__proto__prototype是对象的内部属性,指向其构造函数的是函数的__proto__prototype prototype属性,当函数作为构造函数使用时,新创建的对象会将其指向构造函数的__proto__是获取对象原型的标准方法prototype Object.getPrototypeOf继承实现实现继承的方法有多种原型链继承、构造函数继承、组合继承、原型式继承、寄生式继承、寄生组合式继承等每种方法都有其优缺点,适用于不同场景语法ES6class引入的语法使继承变得更简单,使用关键字实现虽然看ES6class extends起来像传统的面向对象编程,但底层仍然基于原型链只是语法糖,让class代码更易读、更接近其他语言的类实现数组基础操作创建数组访问与修改多维数组提供多种创建数组的方法数使用索引访问数组元素,索引从开始支持多维数组,即数组的元素JavaScript0JavaScript组字面量、构造函数、、修改元素也使用索引也是数组例如Array Array.of fruits
[0]const matrix=[[1,等数组字面量是最常用的梨如果访问不存在的索引,访问多维Array.from fruits
[1]=2,3],[4,5,6],[7,8,9]]方式苹果香蕉返回数组长度通过属数组元素使用多个索引const fruits=[,,undefined lengthmatrix
[1]
[2]橙子是中最常用的性获取,也可以通过修改多维数组常用于表示网格、矩阵或复杂的]Arrays JavaScriptfruits.length数据结构之一属性截断数组数据结构length数组常用方法上方法描述返回值是否修改原数组在数组末尾添加一个或多个元素新数组长度是push移除数组末尾的元素被移除的元素是pop移除数组开头的元素被移除的元素是shift在数组开头添加一个或多个元素新数组长度是unshift返回数组的一部分,不包含结束索引新数组否slice添加、删除或替换数组中的元素包含被删除元素的数组是splice合并两个或多个数组新数组否concat将数组元素连接成字符串字符串否join了解这些方法是否修改原数组非常重要,尤其在处理大型应用或函数式编程时不修改原数组的方法如、更适合函数式编程风格,而修改原数组的方法如、在某些场景下可能更slice concatpush splice高效数组常用方法下数组提供了强大的高阶函数方法,用于数据转换和处理方法对数组每个元素应用函数,返回新数组;方法JavaScript mapfilter创建一个通过测试的元素的新数组;方法将数组减少为单个值;方法对每个元素执行函数,无返回值reduce forEach返回满足条件的第一个元素;检查是否至少有一个元素满足条件;检查是否所有元素都满足条件方法用find someevery sort于排序数组元素,默认按字符串顺序,可提供比较函数自定义排序;方法颠倒数组元素的顺序这些方法极大地简化了数组reverse操作,是日常编程的重要工具字符串操作创建与基本操作字符串可以用单引号、双引号或反引号创建获取长度使用属性,访问单个字符使用length方括号或方法字符串是不可变的,修改字符串实际上是创建新字符串charAt常用字符串方法和查找子字符串位置;、和提取子字符串;indexOf lastIndexOfsubstring substrslice和转换大小写;去除首尾空格;替换子字符toUpperCase toLowerCasetrim replace串;将字符串分割为数组split模板字符串引入的模板字符串使用反引号,支持多行文本和字符串插值可ES6``Hello,${name}!`以在中放置任何有效的表达式,使字符串拼接更加简洁直观${}JavaScript字符串与数组转换使用方法将字符串转换为数组;使用方法将数组转换为字符串split a,b,c.split,join字符串也可以使用或展开运算符转换为字符数组[a,b,c].join-Array.from[...]日期与时间创建日期对象可以通过多种方式创建对象Date当前日期时间•new Date指定日期字符串•new Date2023-05-20指定年月日等•new Date2023,4,20,13,30,0时间戳(毫秒数)•new Date1684566600000获取日期组件对象提供多种方法获取日期时间的各个部分Date、()、•getFullYear getMonth0-11getDate、、•getHours getMinutesgetSeconds(,表示星期日到星期六)•getDay0-6(获取时间戳,毫秒数)•getTime设置日期组件与获取方法类似,设置方法可以修改日期时间的各个部分、、•setFullYear setMonthsetDate、、•setHours setMinutessetSeconds(设置时间戳)•setTime日期格式化与计算提供多种内置格式化方法JavaScript、、•toString toDateStringtoTimeString、•toLocaleDateString toLocaleTimeString日期计算可以直接使用算术运算符计算时间差•错误处理异常基础中的错误对象包含(错误类型)和(错误信息)属性常见的内JavaScript namemessage置错误类型有(语法错误)、(引用错误)、SyntaxError ReferenceErrorTypeError(类型错误)、(范围错误)等了解这些错误类型有助于快速定位问题RangeError语句try...catch基本语法为可能出错的代码处理错误的代码无论try{}catcherror{}finally{是否出错都会执行的代码块中的代码发生错误时,控制权会立即转移到块,}try catch块在或完成后执行,通常用于清理资源finally trycatch抛出自定义错误使用语句可以手动抛出错误可以抛出任何值,但最好是对象或其子类throw Error的实例自定义错误类可以通过继承类实现Error classCustomError extendsError{constructormessage{supermessage;this.name=CustomError;}}错误处理最佳实践只捕获预期的错误,让意外错误传播到全局处理程序提供有意义的错误消息使用块清理资源在异步代码中正确处理错误,尤其是和finally Promise考虑错误日志记录和监控机制,便于排查生产环境问题async/await正则表达式创建正则表达式基本语法与模式可以使用字面量或`/pattern/flags`包括字符类、量词、锚`[abc]``*+{n}`构造函数RegExp`new点、转义、分组、或等特`^$``\````|`创建字RegExppattern,flags`殊字符如(数字)、(字母数`\d``\w`面量更简洁,构造函数可以接受变量作字)、(空白)等简化匹配`\s`为模式与方法标志位RegExp String对象的和方法用于4(全局)、(忽略大小写)、(多RegExp testexec gi m测试和提取匹配对象的行)、()、(粘性)等标String uUnicode y、、、志位修改匹配行为它们组合使用可以match searchreplace方法支持正则参数满足各种匹配需求split正则表达式虽然强大,但复杂的模式可能难以理解和维护建议将复杂模式拆分为多个简单模式,并添加适当的注释在性能敏感的场景中,预编译正则表达式(避免在循环中重复创建)可以提高效率操作基础DOM概念选择元素方法DOM是和文档的编程接常用的选择器方法包括DOM DocumentObject ModelHTML XML口,将文档表示为树结构每个元素都是一个节点,这些节点HTML通过选择单个元素•document.getElementById ID之间形成层级关系通过类名选择元素•document.getElementsByClassName提供了查找、修改、添加和删除页面元素的方法,是DOM集合与网页交互的桥梁JavaScript通过标签名选择元素•document.getElementsByTagName集合通过选择器选择单个元素•document.querySelector CSS通过选择器选择元素集合•document.querySelectorAll CSS对元素的修改包括改变内容、修改属性、改变样式属性DOM innerHTML,textContent setAttribute,getAttribute style,classList创建新元素使用,然后使用或添加到文档中;删除元素使用或更document.createElement appendChildinsertBefore removeChild现代的方法remove事件DOM事件类型鼠标事件•click,dblclick,mouseenter,mouseleave,mousemove键盘事件•keydown,keyup,keypress表单事件•submit,change,focus,blur文档窗口事件•/load,resize,scroll,DOMContentLoaded事件处理添加事件监听器有三种方式属性•HTML buttononclick=handleClick属性•DOM element.onclick=function{}事件监听器•element.addEventListenerclick,function{}事件流事件传播分为三个阶段捕获阶段事件从到目标元素的父元素•window目标阶段事件到达目标元素•冒泡阶段事件从目标元素向上冒泡到•window事件对象事件处理程序会自动接收事件对象参数,包含与事件相关的属性和方法触发事件的元素•e.target处理事件的元素•e.currentTarget阻止默认行为•e.preventDefault阻止事件传播•e.stopPropagation操作BOM对象window对象location浏览器窗口的接口,也是全局对象JavaScript提供当前信息和导航功能URL全局变量和函数是对象的属性和方•window完整•location.href URL法主机名•location.hostname提供窗口操作方法•open,close,路径部分•location.pathnameresizeTo查询字符串•location.search定时器方法•setTimeout,setInterval导航方法•assign,replace,reload对话框方法•alert,confirm,prompt对象对象history navigator提供会话历史导航功能提供浏览器和系统信息历史记录数量浏览器标识字符串•history.length•userAgent后退一步操作系统平台•history.back•platform前进一步浏览器语言•history.forward•language前进或后退步网络连接状态•history.gon n•onLine添加历史记录位置信息•history.pushState•geolocation API基础AJAX对象XMLHttpRequest传统的实现方式,支持所有现代浏览器AJAXFetch API现代化的网络请求接口,基于Promise异步数据处理处理服务器响应并更新页面内容允许网页与服务器异步通信,无需刷新整个页面虽然名称中包含,但现在是更AJAX AsynchronousJavaScript andXML XMLJSON常用的数据格式是最早的实现,代码相对冗长首先创建对象,设置回调函数,配置请求,然后发送XMLHttpRequest AJAXXHR现代开发更倾向于使用,它提供了更简洁的基于的接口基本用法Fetch APIPromise fetchurl.thenresponse=默认不发送,需要设置选项和是最常用的response.json.thendata=console.logdata Fetchcookies credentialsGET POST方法,用于获取数据,用于提交数据异步请求完成后,通常会使用操作更新页面内容HTTP GETPOST DOM操作JSON基础解析与转换JSON JSON是一种轻量级的数据交换格式,基于提供两个内置方法处理JSON JavaScriptObject NotationJavaScript JSON对象语法,但是纯文本JavaScript将字符串转换为对象•JSON.parse JSONJavaScript语法规则JSON将对象转换为字符串•JSON.stringify JavaScriptJSON数据以键值对形式表示•示例数据由逗号分隔•张三北京const jsonStr={name:,age:30,city:};const obj=大括号保存对象•{}JSON.parsejsonStr;方括号保存数组•[]李四上海const obj={name:,age:25,city:};const jsonStr=键必须是字符串,值可以是字符串、数字、对象、数组、布尔值或•null JSON.stringifyobj;支持第二个参数()用于过滤属性,第三个参数()用于美化输出格式处理时的常见问题包括日期对象会被转换为字符串;、函JSON.stringify replacerspace JSONundefined数和会被忽略;循环引用会导致错误可以使用函数(的第二个参数)在解析过程中转换值,例如将日期字符串转回对象Symbol reviverJSON.parse Date异步编程回调同步与异步同步代码按顺序执行,每条语句执行完才能执行下一条异步代码允许其他操作在等待某个操作完成时继续执行中的异步操作包括定时器、网络请求、事件处JavaScript理等2回调函数模式回调是传递给另一个函数的函数,在特定事件发生时被调用它是中最基JavaScript本的异步模式,如和setTimeoutcallback,delay addEventListenerclick,callback回调地狱多个嵌套回调会导致代码难以读懂和维护,形成回调地狱或回调金字塔例如,多个依赖的异步操作,每个操作在前一个操作完成后执行,会导致回调函数层层嵌套错误处理回调中的错误处理通常使用模式回调函数的第一个参数接收错误,第error-first二个参数接收结果这是中的标准做法如果没有错误,第一个参数为或Node.js nullundefined异步编程Promise是引入的异步编程解决方案,表示一个尚未完成但预期将来会完成的操作有三种状态(进行中)、Promise ES6Promise pending(已成功)和(已失败)一旦状态改变,就不会再变创建对象异步fulfilled rejectedPromise newPromiseresolve,reject={/*操作,异步操作成功时调用,失败时调用*/}resolve reject实例提供方法链式处理操作,方法处理拒绝状态,方法在结束时执行清理并行处理多Promise thencatch finallyPromise Promise.all个,全部成功才成功,任一失败则失败;返回最先完成的结果;等待所有完Promise Promise.race PromisePromise.allSettled Promise成,无论成功失败;返回第一个成功的结果解决了回调地狱问题,提供了更优雅的错误处理机制Promise.any PromisePromise异步编程async/await201770%引入时间使用率语法在()中被引入,现代项目中约的异步代码使用async/await ES2017ES8JavaScript70%是异步编程的重要里程碑语法,因其可读性和错误处理优势JavaScript async/await40%性能提升相比链,可以使代码行数减少Promise async/await约,同时提高代码可维护性40%是基于的语法糖,使异步代码看起来更像同步代码函数总是返回一个,async/await Promise async Promise即使函数中没有显式返回在函数内部可以使用关键字暂停函数执行,等待解Promiseasyncawait Promise决,然后以的解决值继续执行Promise错误处理可以使用传统的结构,更直观地捕获异步操作中的错误多个异步操作可以使用try/catch配合需要注意的是,只能在Promise.all awaitawait Promise.all[promise1,promise2]await async函数内部使用,在普通函数中使用会导致语法错误与可以无缝结合,是现代async/await Promise异步编程的首选方式JavaScript新特性上ES6+块级作用域变量箭头函数模板字符串引入和关键提供更简洁的函数语法使用反引号定义,支持ES6let const`字,支持块级作用域,解多行文本和字符串插值params=expression决的变量提升问题箭头函数没有自己的、大大简化var this${expression}允许重新赋值,、,不了字符串拼接操作,提高letconstarguments super声明常量,两者都不允许能用作构造函数特别适了代码可读性,尤其在生重复声明块级作用域使合用于回调函数,可以保成或语句时非HTML SQL得代码结构更清晰,减少持的引用常有用this了意外bug解构赋值从数组或对象中提取值并赋给变量let[a,b]=array;let{name,age}可以设置默认=person值,忽略某些值,交换变量,嵌套解构等,使代码更简洁优雅新特性下ES6+展开运算符类语法使用语法展开数组或对象数组展开引入了更接近传统的类语法...ES6OOPconst arr1=[1,2];class Person{const arr2=[...arr1,3,4];//[1,2,3,4]constructorname{this.name=name;}greet{return`你好,${this.name}`;}对象展开static createname{return newPersonname;}}const obj1={a:1,b:2};支持构造函数、实例方法、静态方法、继承等底层仍基于原型,const obj2={...obj1,c:3};//{a:1,b:2,c:3}extends但语法更清晰用途广泛,如数组复制、合并、参数传递等模块系统提供了标准化的导入导出语法支持默认导出和命名ES6export{name,age};import{name,age}from./module.js exportdefault导出,解决了以前和等不同模块系统的兼容问题CommonJS AMD和是新增的集合类型是键值对集合,允许任何类型作为键;是值的集合,值唯一它们提供了比普通对象和数组更专业的数据结构操Map SetES6Map Set作,如、、属性等,在特定场景下性能更好has deletesize存储机制特性Cookies localStoragesessionStora IndexedDBge存储容量无限制4KB5-10MB5-10MB过期时间可设置永久会话期间永久与服务器通信每次请求否否否复杂度中等简单简单高API数据类型字符串字符串字符串几乎任何类型是最早的客户端存储机制,主要用于服务器识别用户和Cookies WebStorage localStorage提供了更简单的键值对存储,数据永久保存,sessionStorage APIlocalStorage数据在会话结束后删除基本用法、sessionStorage localStorage.setItemkey,valuelocalStorage.getItemkey是一个完整的客户端数据库,支持事务、索引和查询适合存储大量结构化数据,但IndexedDB相对复杂选择存储机制时应考虑数据量、持久性需求、浏览器兼容性和安全性敏感数据API应加密存储,并了解各存储机制的安全限制概览Web API地理位置API允许网页获取用户的地理位置基本用法Geolocation APInavigator.geolocation.getCurrentPositionsuccessCallback,errorCallback,options可获取经纬度、海拔、速度等信息常用于地图应用、位置相关服务、本地化内容等Canvas API提供在网页上绘制图形的能力使用控制元素,绘制形状、文本、图像、JavaScript canvas动画等适用于游戏、数据可视化、图像处理等是基于的绘图,用WebGL Canvas3D API于创建复杂场景3DWeb Workers允许在后台线程执行,不阻塞线程创建方法JavaScript UIconst worker=new通过发送消息,通过事件接收消息适用Workerworker.js postMessageonmessage于复杂计算、数据处理等耗时操作Fetch API现代化的网络请求接口,基于基本用法Promise fetchurl.thenresponse=支持各种方法、请求头、跨域请求、流式响应等逐渐替代传统的response.json HTTPXMLHttpRequest前端开发调试技巧控制台调试断点调试性能分析浏览器开发者工具的面板是最基本的调在面板可以设置断点,暂停代码执行并面板记录页面加载和运行时的性Console SourcesPerformance试工具除了常见的,还有检查变量状态可以使用语句在代码能分析可以识别执行瓶颈、布局console.log debuggerJavaScript、、中直接插入断点条件断点在满足条件时才会抖动、长任务等性能问题面板帮助console.error console.warn Memory等格式化输出触发,适用于循环中特定情况表达式发现内存泄漏,如分析堆快照、记录内存分配console.table console.time Watch和可测量代码执行时间;可以监视变量或表达式值的变化单步执行等面板显示未使用的console.timeEnd CoverageJavaScript在条件为假时输出错误消息;、步入和步出和代码,帮助减少代码量console.assert StepOver StepInto StepCSS创建可折叠的分组输出控制代码执行流程console.group Out框架简介JavaScript案例实战购物车功能需求分析开发一个简单的购物车功能,实现商品列表展示、添加商品到购物车、修改商品数量、删除商品、计算总价等功能界面需要包含商品区和购物车区两部分,操作需要即时反映在上,并UI保存购物车状态数据结构设计商品对象结构;购物车项结构{id,name,price,image}{id,product,quantity,使用数组存储商品列表和购物车内容,确保每个对象有唯一标识符考虑使用subtotal}或对象来优化查找操作,特别是在大数据量情况下Map核心功能实现商品展示使用或方法遍历商品数组,生成插入到页面添加到购forEach mapHTML物车为每个商品添加点击事件监听器,处理添加逻辑数量修改实现增减按钮和直接输入数量删除功能为每个购物车项添加删除按钮和事件处理总价计算使用方法累加所有购物车项的小计reduce代码优化与测试使用模块化设计,将展示逻辑和业务逻辑分离添加本地存储功能,使购物车在页面刷新后保持处理边界情况库存不足、输入非法数量等优化性能避免频繁操作,使用事件委托处理多个元素的点击事件测试各种用户操作场景,确保DOM功能正确且用户体验良好学习资源与后续学习路径推荐书籍与在线教程进阶学习方向《高级程序设计》经典权威教•JavaScript-框架•JavaScript React,Vue,Angular程后端开发•Node.js《你不知道的》系列深入理解•JavaScript-类型系统•TypeScript语言函数式编程与设计模式•文档最全面的免费在线参考•MDN Web-现代工具链•Webpack,Babel,ESLint现代教程•JavaScript.info-JavaScript测试技术•Jest,Cypress互动编程学习平台•freeCodeCamp-练习项目建议开发者社区资源待办事项应用练习基础操作•-DOM查看、贡献和分享代码•GitHub-天气应用学习调用•-API解决开发问题•Stack Overflow-计算器理解事件处理与状态管理•-掘金、中文技术社区•SegmentFault-数据可视化使用或•-Canvas SVG、前端技巧•DevTips CSS-Tricks-个人博客全栈开发实践•-各框架官方论坛和聊天室•复制流行网站挑战复杂布局•UI-。
个人认证
优秀文档
获得点赞 0