javasript
2023-05-14 16:58:01 8 举报
AI智能生成
前端js
作者其他创作
大纲/内容
浏览端的JS
<br> ECMAScript,包含JS基础语法<br> DOM,文档对象模型,可以操作HTML文档的结构和元素的增删改查<br> BOM,浏览器对象模型,控制浏览器的,比如地址跳转、大小、滚动等
选择器<br>
querySelector(selector) - 通过 CSS 选择器获取第一个符合条件的元素节点。<br>querySelectorAll(selector) - 通过 CSS 选择器获取一个或多个元素节点。<br> getElementById(id) - 通过元素 id 属性获取一个元素节点。<br> getElementsByClassName(class) - 通过元素 class 属性获取一个或多个元素节点。<br> getElementsByTagName(tag) - 通过元素标签名获取一个或多个元素节点。<br> getElementByName(name) - 通过元素 name 属性获取一个或多个元素节点。<br> document.forms[name] - 通过表单 name 属性获取一个表单元素节点。<br> document.images - 获取文档中所有的图像元素节点。<br>
输出和输入
<br> 输入:prompt()、页面表单输入、后台数据输入<br> 输出:<br> console.log()控制台输出<br> document.write():了解<br> dom操作,比如给页面上标签添加内容<br>
变量
定义
变量名
命名规则
命名规范
赋值
使用
作用域
全局作用域
块级作用域,{}之间的范围
函数作用域,函数的{}之间的范围
形参:整个函数中有效
局部变量:从定义语句到函数的{}结尾位置
wbepack
npx webpack
执行打包<br>
npx webpack-dev-server
启动服务器
ctrl=c
关闭服务器
Express
命令
帮助命令
express -h
运行
node app.js
保持刷新
nodemon app.js
文件
public:保存项目的静态资源,比html、css、图片等,因为传统的后台项目这静态和后台的代码是放在一个项目中的
routes:存放Express中路由文件,路由就是处理每一个请求的代码文件。(重点)
views:保存页面模板的,只是在传统后台项目中需要,后面使用前后端分离项目之后会删除。
app.js:就是项目的启动入口文件。(重点)
使用介绍
<br> 创建请求接口,一般使用路由来处理<br> 获取请求参数。<br> get:http://localhost:3000/getMovies?参数名=参数值&参数名=参数值<br> 在浏览器地址栏输入的地址然后回车,就是发起get请求<br> 在html中使用超链接跳转页面<br> 通过location.href等操作<br> 表单提交时,method不写或者method=”get”时。<br> 请求图片<br> ajax.get(),不同的ajax库有不同的写法<br> 通过其它工具来模拟,postman或apifox<br> post:保存在请求体中,post支持get传参方式<br> 表单提交时,method=”post”<br> ajax.post<br> 通过其它工具来模拟,postman或apifox<br> post和get请求的区别<br> 传参不一样<br> post更安全,因为数据不会暴露在地址栏中<br> post没有传参数据的大小限制,所以可以实现文件上传。get有传参数据大小限制,具体限制由浏览器决定<br> 连接数据库,从数据库中操作数据
ECMAScript
运算符
算术运算符,(+-*/%)数字类型,Number(),parseInt(), parseFloat()<br> 比较运算符,==和===,其它就不写了。返回的都布尔值,true或false<br> 赋值运算符,=,+=,-=,/=,*=,%=<br> 逻辑运算符:&&(且),||(或),!(非),返回的都是布尔值
数据类型
简单(基本)数据类型<br> number:数字类型,包含小数和整数<br> string:字符串,使用单引号、双引号、反引号包裹<br> boolean:布尔值<br> false:在条件语句中,undefined、null、””或’’、0等都是假值,注意[]空数组不是<br> true:除了假值都是真值<br> undefined:变量没有被赋值<br> null:变量尝试去赋值,但是失败了。null,确切来说是表示引用数据类型为空的概念。<br> null == undefined<br> null === undefined<br> Symbol<br> bigInt<br> 复杂(引用)数据类型<br> Object<br> 数组<br> 函数<br>
数据类型的转换
转换成数字:Number、parseInt、parseFloat<br> 转换成字符串:String()或+号与字符串进行拼接<br> 转换成布尔值:Boolean()
数组
变量一次只能保存一个数据,但数组可以保存多个数据的。<br> 定义<br> 长度<br> 索引<br> 遍历<br> 常用方法<br> push<br> pop<br> shift<br> unshift<br> splice<br> includes<br> indexOf<br> filter<br> forEach<br> map<br> some<br> every<br> reduce<br> 常用操作<br> 最大值<br> 最小值<br> 求和<br> 求平均<br> 去重<br> 排序<br>
增<br>push(元素):在数组的底部添加元素,可以添加多个元素,使用逗号分隔,返回值是数组添加成功后的长度 unshift() <br>向数组的开头添加一个或更多元素,并返回新的长度。<br>splice(第几个元素, 0, 添加的元素1, 添加的元素2, ...) 从数组中添加或删除元素。<br>删<br>splice(第几个元素, 删除的数量, 添加的元素1, 添加的元素2, ...) 从数组中添加或删除元素。<br>pop() 删除数组的最后一个元素并返回删除的元素。<br>shift() 删除并返回数组的第一个元素。<br>改:原来位置上的数据先删除,再添加新的<br>splice(第几个元素, 删除的数量, 添加的元素1, 添加的元素2, ...) 从数组中添加或删除元素。<br>查<br>for循环遍历<br>indexOf(值):从左到右,查看指定的值在数组中的索引位置,如果数组中不存在则返回-1<br>lastIndexOf(值):从右到左<br>includes() 判断一个数组是否包含一个指定的值。<br>includes 是字符串和数组对象方法之一,用于判断一个字符串或数组是否包含另一个子串或元素,并返回布尔值。
循环语句
for循环<br> 计数for循环<br> 初始语句:创建一个计数变量i<br> 条件语句:判断i的值是否符合条件,符合就执行循环体,然后再执行迭代语句,如果不符合条件则退出循环<br> 循环体<br> 迭代语句:修改i的值<br> for-in<br> for-of<br> while循环<br> do-while循环
嵌套循环
内循环:执行次数=内循环的次数*外循环的次数<br> 外循环
循环的控制语句
break<br> continue<br> return
<br>break:结束整个循环,如果有嵌套循环,就近原则。如果需要打印1~10,当打印5的时候遇到break,那么1234<br>continue:结束当次循环,如果有嵌套循环,就近原则。如果需要打印1~10,当打印5的时候遇到continue,那么1234678910<br>eturn:必须写在函数中,代码整个函数提前结束,函数都结束了,函数中的循环肯定也结束了
分支语句
if语句<br> if(条件)<br> if(条件)-else<br> if(条件)-else if(条件)-else<br> 也支持嵌套<br> switch语句<br> case<br> break<br>
函数
定义<br> 全局函数:function 函数名(形参列表){函数体}<br> 函数表达式:let 函数名 = function() {}<br> 调用<br> 全局函数:调用和定义代码没有顺序要求<br> 函数表达式:调用的代码必须在定义的代码后面<br> 函数参数及传参<br> 形参<br> 实参<br> 注意:在JS中形参和实参数据可以不一致<br> arguments:接收实参<br> 返回值:return 值或变量
本地存储<br>
只能存字符串<br>localstaorage.setitem(属性名,属性值)<br>
localStorage:永久存储<br>sessionStorage:临时存储,页面关闭,数据丢失
<br> setItem(key, value):将数据写入本地存储<br> key:字符串,存储的唯一标识<br> value:字符串,存储的内容,只能使用字符串,如果存的是对象或数组,使用将该对象转换为字符串<br> 对象或数组转换为字符串:JSON.stringify(对象或数组)<br> getItem(key):获取存储的数据,返回的类型是字符串<br> key<br> 字符串转换为对象或数组:JSON.parse(字符串)<br> clear():清空存储的数据<br> removeItem(key):删除指定的key的数据
将对象转换为字符串<br>let Str = JSON.stringify(对象)<br>将字符串转换为对象或数组<br>let Str = JSON.parse( key )
对象
就是一种数据结构,可以形容一个物品或生物等,{属性名: 属性值, 属性名: 属性值, 属性名: 属性值, …}<br> 定义:let 对象名 = {}<br> 使用属性:对象名.属性名或对象名[“属性名”]<br> 修改属性值:对象名.属性名 = 值或对象名[“属性名”] = 值<br> 添加属性:对象名.新的属性名 = 值;<br> 删除属性:delete 对象名.属性名
高阶函数<br>
array.函数(function(currentValue,index,arr), thisValue)
forEach() 方法用于调用数组的每个元素,并将元素传递给回调函数。<br>注意: forEach() 对于空数组是不会执行回调函数的。
循环遍历数组<br>
filter
数组.filter((element,index)=> 条件 )
filter() 是 JavaScript 中一个数组方法,它用于过滤出符合给定条件的数组元素并将它们返回。具体用法如下:<br><br>const newArray = array.filter(callback(element[, index][, array][, thisArg]);<br><br>其中,array 表示原始数组,callback 是一个回调函数,它接受三个参数:<br><br> element:当前处理的元素<br> index(可选):当前元素在数组中的索引<br> array(可选):原始数组对象<br><br>callback 函数必须返回一个布尔值。如果返回 true,则表示当前元素符合过滤条件,将被保留在新的数组中;如果返回 false,则当前元素会被过滤掉。<br><br>filter() 方法将遍历原始数组中的每个元素,并对每个元素执行 callback 函数。最终返回符合条件的数组元素组成的新数组 newArray,而不会改变原始数组 array。<br><br>以下是一个使用 filter() 方法计算整数数组中偶数元素的例子:<br><br>const numbers = [1, 2, 3, 4, 5, 6];<br>const evenNumbers = numbers.filter(function(number) {<br> return number % 2 === 0;<br>});<br>console.log(evenNumbers); // 输出 [2, 4, 6]<br><br>以上代码中,我们定义了一个名为 numbers 的数组。然后通过调用 filter() 方法并传入一个回调函数,选出其中所有能被 2 整除的元素并存储在名为 evenNumbers 的新数组中。最后,打印出 evenNumbers 数组的内容。<br><br>通过使用 filter() 方法,我们可以方便地过滤出符合特定条件的数组元素,这在实际应用中很常见。
filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。<br>map() 方法按照原始数组元素顺序依次处理元素。<br>注意: map() 不会对空数组进行检测。<br>注意: map() 不会改变原始数组。
every() 方法用于检测数组所有元素是否都符合指定条件(通过函数提供)。<br>every() 方法使用指定函数检测数组中的所有元素:<br>如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测。<br>如果所有元素都满足条件,则返回 true。<br>注意: every() 不会对空数组进行检测。<br>注意: every() 不会改变原始数组。
some() 方法用于检测数组中的元素是否满足指定条件(函数提供)。<br>some() 方法会依次执行数组的每个元素:<br>如果有一个元素满足条件,则表达式返回true , 剩余的元素不会再执行检测。<br>如果没有满足条件的元素,则返回false。<br>注意: some() 不会对空数组进行检测。<br>注意: some() 不会改变原始数组。
find() 方法返回通过测试(函数内判断)的数组的第一个元素的值。<br>find() 方法为数组中的每个元素都调用一次函数执行:<br>当数组中的元素在测试条件时返回 true 时, find() 返回符合条件的元素,之后的值不会再调用执行函数。<br>如果没有符合条件的元素返回 undefined<br>注意: find() 对于空数组,函数是不会执行的。<br>注意: find() 并没有改变数组的原始值。
indIndex() 方法返回传入一个测试条件(函数)符合条件的数组第一个元素位置。<br>findIndex() 方法为数组中的每个元素都调用一次函数执行:<br>当数组中的元素在测试条件时返回 true 时, findIndex() 返回符合条件的元素的索引位置,之后的值不会再调用执行函数。<br>如果没有符合条件的元素返回 -1<br>注意: findIndex() 对于空数组,函数是不会执行的。<br>注意: findIndex() 并没有改变数组的原始值。
reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。<br>reduce() 可以作为一个高阶函数,用于函数的 compose。<br>注意: reduce() 对于空数组是不会执行回调函数的。
事件<br>
点击事件
onclick 只能传简单类型数据,在html通过onXXX绑定事件,成为dom0级事件<br>
按钮事件<br>
event
e.target.value<br>获取触发事件的元素值<br>
切换事件<br>
onchange<br>
焦点事件<br>
blur
获取焦点事件<br>
focus
输入框输入事件
input
滚动事件
scorll
函数中使用,html标签使用<br>
on事件名=null<br>dom0级移除<br>
标签对象.removeEventListener("事件名",绑定的事件函数名,是否冒泡)<br>
DOM的节点
节点代表整个HTML文档中所有内容,包含文本内容。
查找<br> 整个文档中查找<br> document.querySelector(“选择器”):返回最先匹配到的元素对象<br> document.querySelectorAll(“选择器”):返回所有匹配到的元素对象,是一个类似数组的对象<br> 创建<br> document.createElement(“标签名”)<br> 添加<br> 元素对象.appendChild<br> 删除<br> 元素对象.remove():自对象remove()方法的元素对象删除<br> 修改
<br><br>
选择器.addEventListener("click", function (e) {})
添加点击事件
其他代码
addEventListener<br>变量名. .(事件,function( ) )<br>js里添加点击事件<br>
变量名. .(事件,function( ) ){} tus )
createElement<br>document..(" ")<br>创造一个元素<br>
HTML页面标签.appendChild(被变量保存的元素)<br>把创造的元素放入HTML<br>
保存创建的元素名的变量.className=" scss样式名 " 添加和删除是字符串操作<br>i.classList.add(" scss样式名 ") 添加<br>i.classList.remove(" scss样式名 ") 删除<br>
instanceof 判断一个变量是否属于指定类型
if(!Array.isArray(array))
if(typeof(fn) != "function")
H5技术栈<br>
H5介绍
提供很多新的特性,可以更方便的完成一些特定功能,比如本地存储、视频、音频的播放。
提供更多语义化(见名知意)标签,
header、footer、main、aside等。https://www.runoob.com/html/html5-new-element.html
新的表单元素
date
color
email
range
新的属性
required:必填属性
移动端开发
app开发:要使用JAVA或Objective-C或者Swift开发相应app。需要打包成对应的安装文件,然后下载安装
h5开发:直接在移动端的浏览器上去运行。没有平台限制
小程序开发:微信小程序,支付宝、百度、飞书等大概有十几个
响应式布局
媒体查询<br> @media screen and|,|not (expression) {<br> CSS样式代码<br> }<br>expression<br> max-width:最大宽度<br> min-width:最小宽度<br> orientation:手机是竖屏还是横屏
两者布局的比较
响应式:当项目页面内容不多时,可以用来做移动端的布局方案,比如官网之类的,apple官网。如果网站内容过多,不推荐使用响应式,比如京东、淘宝<br> 自适应布局:适用于移动端,不同分辨率的布局方案。
自适应布局
自动去适应不同屏幕(分辨率)大小<br> 弹性盒子:自动压缩,只对直接子元素有效<br> em和rem:都是数值单位,跟px差不多<br> em:根据父元素的font-size来设置元素大小<br> rem:根据html标签上的font-size来调整元素的大小,默认1rem = 16px;<br>
vh和vw:CSS提供一种自适应布局方案。兼容相对来说差一点
vw:将手机屏幕的宽度分为100份。100vw,就是占满整个浏览器。有点像百分比
vh:100vh就是整个手机屏幕的高度。
修改rem的参考值
document.documentElement.style.fontSize = "10px";
JavaScript单词用法
选择器
通过名称获取属性的值
格式转换
转换为数字
Number(字符串)
渲染HTML
innerText
只能渲染文字和数字<br>
innerHTML
渲染标签
去除其他样式
去除空格
trim()
函数相关
alert('获得一台iphone10086')
弹窗
return
结束函数
长度
length
window.onresize
页面大小
ul标签内部长度
childElementCount
时间
定时器
setTimeout(要执行的代码, 等待的毫秒数)
clearTimeout
清除定时器
随机数<br>
Math
ceil(x) 对数进行上舍入。
floor(x) 对 x 进行下舍入。
random() 返回 0 ~ 1 之间的随机数。
Math.floor(Math.random() * (1000 - 100) + 100);
数组
数组名=["x","y"]
数组对象<br>
数组名=[ {属性名:”属性值“},{属性名:”属性值“,} ]
增push(元素):<br>splice(第几个元素, 0, 添加的元素1, 添加的元素2, ...) 从数组中添加或删除元素。
查indexOf(值):从左到右,查看指定的值在数组中的索引位置,如果数组中不存在则返回-1<br>lastIndexOf(值):从右到左<br>includes(值) 判断一个数组是否包含一个指定的值。<br>includes 是字符串和数组对象方法之一,用于判断一个字符串或数组是否<font color="#f5b9b7">包含</font>另一个子串或元素,并返回布尔值。
删splice(第几个元素, 删除的数量, 添加的元素1, 添加的元素2, ...) 从数组中添加或删除元素。<br>pop() 删除数组的最后一个元素并返回删除的元素。<br>shift() 删除并返回数组的第一个元素。<br>改:原来位置上的数据先删除,再添加新的<br>splice(第几个元素, 删除的数量, 添加的元素1, 添加的元素2, ...) 从数组中添加或删除元素。
存储<br>
存
setItem
本地
localStorage
会话
sessionStorage
数组或者对象<br>
JSON.stringify(数组名)
localStorage.setItem('key', JSON.stringify(数组名));
取
getItem
JSON.parse(localStorage.getItem('key'));
事件
点击事件
onclick
onclick="ac()"
括号里面可以传参数,函数()里面随便写一个接收<br>
按钮事件<br>
event
e.target.value<br>获取触发事件的元素值<br>
事件委托
addEventListener
p.addEventListener("change", function(e) {})
给父元素添加
失焦事件
onblur
鼠标点别的地方就失焦
切换事件<br>
onchange<br>
DOM添加<br>
className
添加class样式
classList
.classList.add("active");
.classList.remove("active");
单词用法
img
选择器获取img之后可以直接修改
document.querySelector(".info img").src = selectMovie.imgSrc;
join
把数组中的所有元素转换为一个字符串:
.join(",")
Array.from(object, mapFunction, thisValue)
通过字符串创建一个数组:
.split("-")
分割字符串
instanceof 判断一个变量是否属于指定类型
Array.isArray(array)
hasOwnproperty(属性名)
判断对象是否具有指定属性名
Object.assign({},obj)
复制对象数组<br>
size
返回Set集合的大小,即里面数据的总数
Set集合
特点:不允许有重复的数据。<br><br>使用:只能通过new关键字来创建对象<br><br> new Set()<br>
size:返回Set集合的大小,即里面数据的总数<br> add(数据):在Set集合中添加数据,返回set对象本身,因此支持链式写法<br> clear():清空Set集合<br> delete(数据):删除数据<br> forEach():Set的遍历方法<br> has(数据):判断是否存在指定的数据
函数
class函数
person构造函数
类永远是constructor
Webpack
创建项目后用集成终端打开
在项目中下载webpack相关工具
npm install webpack webpack-cli --save-dev
npm install --save-dev html-webpack-plugin
插件<br>
npm i webpack-dev-server
服务器
npm install --save-dev style-loader css-loader sass-loader sass webpack
处理css,scss,
npm i html-withimg-loader -D
处理图片
创建src目录
在webpack项目规范,所有的源代码(程序自己写的代码),即JS、CSS、HTML、图片等都要放在src中。那webpack一般都将src中的文件打包处理。如果不需要webpack打包处理的文件,就不需要放在src中
创建webpack配置文件
配置文件默认名称为webpack.config.js,且默认路径为项目的根目录下,即与package.json在同一层目录
执行打包命令
在终端输入
webpack 回车
或者
npx webpack
插件<br>
npm install --save-dev html-webpack-plugin
NOdejs<br>
NOdejs
path、fs(文件模块)
1、path<br>路径模块,所有跟路径相关的操作都可以使用path<br> join<br> resolve<br> extname:获取路径的后缀名,包含了小数点<br>2、FS<br>文件操作模块,文件读取,一般配合path模块来处理文件的路径<br> readFile():读取指定文件<br> writeFile():在指定的文件中写入内容,会覆盖整个文件<br> appendFile():在文件中追加内容
//引入文件模块
const fs = require('fs');
const path = require('path');
fs.readFile('./files/1.txt', 'utf8', (err, data) => {<br> if (err) throw err; //抛出错误,后面的程序就不会再执行了<br> console.log(data); //data就是文件读取到的内容<br>});
处理错误
try-catch
async function read() {<br> try {<br> let data1 = await fsp.readFile('./files/4.txt', 'utf8');<br> console.log(data1);<br> } catch (err) {<br> //当try中的代码出现异常时,就会执行catch中来<br> console.log('上面的代码出现异常了', err);<br> // throw err;<br> }<br> console.log('程序执行完成');<br>}
3、全局模块<br>Global,提供一全局性的内容,与浏览器环境中的window对象类似。所以全局模块中的内容不需要导入,直接使用即可<br> __dirname:当前正在执行的文件所在的目录<br> __filename:当前正在执行的文件路径
同步,异步<br>
Promise是一种JavaScript对象,用于表示一个异步操作的最终完成结果(完成了,未完成)。在异步编程中,Promise被广泛的应用于解决回调地狱的问题,提高代码的可读性和减少错误处理的复杂度问题。
1、状态<br>Promise对象有三种状态。<br> 进行中,pending,只要创建了Promise对象,那么该对象就进入pending状态。<br> 已成功,fulfilled<br> 已失败,rejected
3、Promise的实例方法
then():对应成功状态的方法
catch():对应失败状态的方法
2、创建Promise对象<br> // executor(resolve: (value: any) => void, reject: (reason?: any) => void): void<br> console.log('程序开始了');<br> let p1 = new Promise((resolve, rejects) => {<br> //resolve,返回成功状态<br> // resolve(); //Promise里面的代码是成功执行了<br> // rejects(); // Promise里面的代码是失败执行了<br> setTimeout(function () {<br> console.log('异步执行了');<br> // resolve('成功了');<br> rejects('失败了');<br> }, 1000);<br> });<br> p1.then((data) => {<br> console.log('data', data);<br> }).catch((res) => {<br> console.log('res', res);<br> });
1、async
用来声明一个函数是一个异步的函数,当一个函数被async关键字修饰后,其返回结果就会默认变成一个Promise.resovle状态的对象。并且函数内部不再需要使用回调函数或者传递Promise来处理异步操作了。
2、await
也是一个关键字,用于等待一个Promise对象的状态变为resovled(已完成)或rejected(已失败)。使用await只能接收resovled的返回值。rejected则会抛出异常。
有了await之后和Promise,可以将异步代码写成同步代码的方式。注意,只是方式上像同步代码,但本质上还是异步代码。
0 条评论
下一页