vue学习的前置知识
一-ES6语法
链接:前端开发常用的ES6语法,建议收藏! - 掘金 (juejin.cn)
1三问
是什么:全称ECMAScript,由欧洲计算机协会ECMA制定的一种脚本语言的标准化规范
为什么:简洁统一
2变量型
var、let、const区别
- var作用在函数内(全局),let和const仅作用在{}内(局部)
- var存在变量提升现象(编译时先寻找可编译参数赋值为null,再编译具体程序),let和const没有
- const必须先赋值且赋值后不可再赋值
3箭头函数
写法:const 方法名 = (参数1,参数2) = >{return xxx;}
举例:
const ft = (x,y) =>{return x+y;}
ft("i love","handsome");//调用
4解构
//数组解构
let [a,b] = [0,1,2,3];
console.log(a,b);
//对象解构
const {name,age} = {name:"蔡帅",age:"20"};
console.log(`${name}的年龄是${age}`)
- 数组解构按顺序获取
- 对象解构获取同名的变量的值
5剩余参数
let u1 = ['张三','李四','王五'];
let u2 = ['永嘉','中海寰宇','驯','品欣','中暑'] ;
let u3 = [...u1,...u2];
console.log(u3);
将剩余的参数表示为一个数组后读取。
6可选链
//定义数据
let res1 = {
data:{
data:{
success:true,
id: "919"
},
af:{
ab:123
}
}
}
if(res1?.data?.data?.success){
let id = res1?.data?.data?.id;
console.log(id);
}
console.log("abc");
- 使用 ?. 表示链上任一元素均存在。
7Set
一种数据结构,与数组类似,区别:其内元素不可重复。
Set在js的用法:
//Set
const set1 = new Set([1,2,3,4,5])
console.log(set1.add(6))//添加元素
set1.delete(1)//删除元素
console.log(set1.entries());//迭代
console.log(set1.has(6));//含有
set1.clear();//清除
console.log(set1);
8数组
//数组
let u1 = [1,2,3,4,5];
let u2 = ['apple','banala','orange'];
let u4 = [{name:'TsingHua',score1:380,score2:420},
{name:'ShanghaiJiaoTong',score1:400,score2:400}]
let u3 = [...u1,...u2];//利用剩余余数进行拼接还可以用push
u3.push(4,5);console.log(u3);
console.log(u3.includes('apple'));//includes数组的含有
let univercity = u4.find((item,index)=>item.name = 'TsingHua');//find((item,index)=>item.xx满足条件)
let univercity1 = u4.filter((item,index)=>item.score1>379);//利用filter((item,index)=>item.满足条件)
//区别find找到第一个成员,filter找到满足条件的数组
let univercity2 = u4.map((item,index)=>{
item.score1+=10;
item.score2+=5;
return item;
})//使用map生成新的数组
console.log(univercity)
console.log(univercity1)
console.log(univercity2);
- …余数拼接
- include()含有
- find((item,index)=>item.满足条件)寻找第一个满足条件的元素
- filter((item,index)=>item.满足条件)寻找满足条件的所有元素
- map((item,index)=>{操作 return item;})对原数组进行操作生成新数组
9字符串
let message = "时间会过去很久但爱不会变";
let res = message.startsWith("时间");//以什么开始
let res1 = message.endsWith("不会变")//以什么结束
console.log(res,res1)
//反引号实现元素代入
console.log(`从前有个人说过:${message}`)
- startsWith()以…开头
- endsWith()以…结尾
- 反引号,可代入元素${}实现
二-ES6模块化
1三问
是什么:前端定制的一种开发规范;
为什么:能够统一浏览器端和服务器端;
2顺序
-
搭建node环境
npm init -y //后在package.json中配置 "type":"module",
-
导出
let name = "蔡帅"; let age = 20; function desc(){ console.log("是个帅哥"); } //默认导出--一个js一个默认 export default{ name, age, desc } //统一导出 let school = "TsingHua"; let score = 800; export{school,score} //按需导出 export let color = "red";
分为export{}统一,export按需,export default{}默认导出
三导出可同时存在
-
导入
import ES6 from './ES6.js'//默认导入
import {school,score,color} from './ES6.js'//统一/按需 导入
三-包管理器
npm是其一。类似手机的应用商店。
需要引用哪些包就通过包管理器去下载对应的包。
包
概念
包是组织类的一种形式。package
为避免出现同名类,可以在不同包下出现类同名。
命名
一般为域名的颠倒形势,如com.bit.cmw
常见包
三-原型和原型链
原型
函数有一个prototype属性,指向函数的原型对象,所有新定义的对象都能够共享原型对象的属性和方法。
原型链
每个实例对象通过proto指向原型对象,同时原型对象也可能拥有原型就这样一直指向null。
四-数组方法
1改变原数组的方法
-
push()末尾添加数据
var arr = [10, 20, 30, 40] arr.push(50) console.log(arr)
-
pop()删除末尾数据
arr.pop()
-
unshirt头部添加数据
arr.unshift(919)
-
shift()头部删除数据
arr.shift();
-
reverse()翻转数据
arr.reverse()
-
排序(正排,倒排)
arr.sort(function(a,b){return(a-b)})//正排 arr.sort(function(a,b){return(b-a)})//倒排
-
splice截取数据
res = arr.splice(1,2);//截取从一开始的两个数据即1,2 res = arr.splice(1,2,72,9);//截取从一开始的两个数据即1,2并且将其赋给res,而后添加数据72,9在被截取的位置
2不改变原数组的方法
-
concat合并数据进数组
var arr = ["you","are","handsome"]; res = arr.concat("yes") console.log(res) console.log(arr)
-
数组转字符串
var arr = ["you",100,true,"handsome","straight"]; res = arr.join('+'); console.log(res) console.log(arr)
-
slice截取数据(包前不包后)且原数组不变
var arr = [2,"帅哥",4,10] res = arr.slice(1,2) console.log(res) console.log(arr)
-
indexOf从左查看数据的索引
lastIndexOf从右查看数据的索引
var arr = [10, 20, 10, 30, 40, 50, 60] res = arr.indexOf(10) console.log(arr) console.log(res); //************************************* //indexOf 语法二从索引1开始查 var arr = [10, 20, 10, 30, 40, 50, 60] res = arr.indexOf(30,1) console.log(arr) console.log(res); var arr = [10, 20, 10, 30, 40, 50, 60] res = arr.lastIndexOf(50) console.log(arr) console.log(res); //************************************* //lastIndexOf 语法二 var arr = [10, 20, 10, 30, 40, 50, 60] res = arr.lastIndexOf(50,4) console.log(arr) console.log(res);
3ES6新增方法
-
foreach遍历数组
//foreach遍历数组 var arr = [10 ,20 ,30, 40, 50]; console.log('原始数组',arr); var res = arr.forEach(function(item,index){ console.log(item,'----',index,'----',arr) })
-
使用map构造新的函数
模板
res = arr.map(function(item){ return 操作(item+5); })
示例
var arr = [119,115,109,65,68,68]; res = arr.map(function(item,index){ return item +5; }); sum0 = 0; arr.forEach(function(item){sum0 += item}) console.log("原成绩",sum0); sum1 = 0; res.forEach(function(item){sum1 += item}) console.log("再静下心来也许能达到的成绩",sum1);
-
filter过滤器
如其名,满足条件的return出去,不满足的不return
var arr = [2,10,24,20]; res = arr.filter(function(item,index){ return item > 8; }) console.log(res) console.log(arr)
-
every判断数组是否满足所有条件
var arr = [2,10,24,20]; res = arr.every(function(item){ return item > 1; }) console.log(arr,res);
-
some判断数组是否有满足条件的元素
//some一部分数组满足条件 var arr = [2,10,24,20]; res = arr.some(function(item){ return item > 23; }) console.log(res);
-
find 从左往右找到满足条件的一个元素
var arr = [2,10,24,20]; console.log("原数组",arr) res = arr.find(function(item){ return item > 11; }) console.log(res)
-
reduce()对数组内元素进行运算并返回一个值
var arr = [119,115,109,65,68,68]; res = arr.reduce(function(prev,item){ return prev+=item; }) console.log(res)
五-ajax
尚硅谷05.尚硅谷_AJAX-HTTP协议请求报文与响应文本结构_哔哩哔哩_bilibili
1三问
是什么:无需重新加载整个页面的情况下,能够更新部分网页的技术。(无刷新获取数据)
为什么
优点
- 无刷新与服务器通信
- 可以只更新部分页面
缺点
-
无浏览历史(类似浏览器的回到上一步)
-
无法跨域(无法访问不同域的东西)
-
SEO爬虫(搜索引擎)不友好(无法优化),
【响应体:服务器返还给客户端的身体
HTTP内容:由三部分组成,行,头,体
响应行:报文协议和版本,状态码及其状态描述
响应头:由属性组成
响应体:服务端返回给用户的文本信息】
2HTTP协议
HypetextTransporTProtocol超文本传输协议,规定万维网和浏览器之间通信的规则
请求报文
-
行
POST (方法)
s?ze=utf-8 ()
HTTP/1.1(版本)
-
头
HOST:
Cookie:
Content-type:
User-Agent :
-
空行
-
体
username=admin&password=admin
响应报文
-
行
HTTP/1.1 200 OK
-
头
-
空行
-
体
<html>
<head>
</head>
<body>
<h1>
you handsome!!!
</h1>
</body>
</html>
3express框架
-
引入框架
-
创建应用对象
-
创建路由规则
-
监听端口启动服务
const express = require('express'); const app = express(); app.get('/',(req,res)=>{ res.send("you are handsome"); }); app.listen(8000,()=>{ console.log('Server started on port 8000'); });
4简单示例
server.js修改
const express = require('express');
const appObj = express();
app.get('/server',(req,res)=>{
//设置响应头,运行跨域
res.setHeader('Access-Control-Allow-Origin','*');
//设置响应体
res.send("hello money");
});
app.listen(2400,()=>{
console.log('Server started on port 2400');
})
-
引入
-
创建对象
-
路由规则
跨域,设置响应体
-
监听
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="ajax请求" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
#result{
width: 200px;
height: 100px;
border:solid 1px #90b;
}
</style>
</head>
<body>
<button>点击返送请求</button>
<div id="result"></div>
<script>
//绑定button
const btn = document.getElementsByTagName('button')[0];
btn.onclick = function(){
// console.log('test')测试连接
//1create a object
const xhr = new XMLHttpRequest();
//2initiation
xhr.open('GET','http://127.0.0.1:2400/server');
//3send
xhr.send();
//4judge
xhr.onreadystatechange = function(){
if(xhr.readyState === 4){
//
if(xhr.status >=200 && xhr.status < 300){
console.log(xhr.status);
result.innerHTML = xhr.response;
}
}
}
};
</script>
</body>
</html>
html
- 写body一个按钮,一个文本框
- 写script
- 绑定button
- button点击运行的方法
- 创建对象
- 初始化XMLHttpRequest
- 将server.js内容发送
- 判断,填入数据
post一样
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="Post ajax请求" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
#result{
width: 200px;
height: 100px;
border: solid 1px #903;
}
</style>
</head>
<body>
<div id="result"></div>
<script>
const result = document.getElementById("result");
//band
result.addEventListener("mouseover",function(){
// console.log("test")test
//create obj
const xhr = new XMLHttpRequest();
//init
xhr.open("POST","http://127.0.0.1:2400/server");
//send
xhr.send();
//judge
xhr.onreadystatechange = function(){
if(xhr.readyState == 4){
if(xhr.status >=200 & xhr.status < 300){
console.log(xhr.status);
result.innerHTML = xhr.response;
}
}
}
})
</script>
</body>
</html>
按下键盘响应事件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>json-server</title>
<style>
#result{
width: 200px;
height: 100px;
border: solid 1px #903;
}
</style>
</head>
<body>
<div id="result"></div>
<script>
const result = document.getElementById('result');
window.onkeydown = function(){
const xhr = new XMLHttpRequest();
xhr.open('get','http://127.0.0.1:2400/json-server')
xhr.send();
xhr.onreadystatechange = function(){
if(xhr.readyState === 4){
if(xhr.status >= 200 && xhr.status < 300){
// console.log(xhr.status);
let data = JSON.parse(xhr.response);
console.log(data)
result.innerHTML = data.name;
}
}
}
}
</script>
</body>
</html>
六-promise
基本使用![在这里插入图片描述](https://img-blog.csdnimg.cn/7177c671472f4760990677187db68745.png#pic_center
api
关键问题
封装
async和await
三问
是什么:一个构造函数,promise对象封装一个异步操作,获得其0或1值
为什么:
原有为回调,造成回调地狱
怎么做:
支持链式调用,
七-axios
(59条消息) b站视频-尚硅谷Web前端axios从入门到源码分析-笔记_b站尚硅谷web前端详细笔记_七里香777的博客-CSDN博客
通过编写接口调用Mock数据去测试Axios请求
1三问
是什么:Axios是一个HTTP请求库
怎么做:在浏览器和Node.js进行HTTP请求
它提供API(ApplicationProgramInterface/应用程序接口),使使用者发送各种类型的请求,并响应数据。
2简单示例
- get获取
- POST修改
- PUT增加
- DELELE删除
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="https://cdn.bootcdn.net/ajax/libs/axios/1.3.6/axios.js"></script>
</head>
<body>
<div>
<h2>axios基本使用</h2>
<button> 发送GET请求 </button>
<button> 发送POST请求 </button>
<button> 发送 PUT 请求 </button>
<button> 发送 DELETE 请求 </button>
</div>
<script>
const btns = document.querySelectorAll('button');
btns[0].onclick = function(){
axios({
method:'GET',
url:'http://localhost:3000/',
}).then(response=>{
console.log(response)
})
},
btns[1].onclick = function(){
axios({
method:'POST',
url:'http://localhost:3000/posts',
data:{
title:"今天要开始学vue",
name:"蔡蔚蔚"
}
}).then(response=>{
console.log(response)
})
},
btns[2].onclick = function(){
axios({
method:'PUT',
url:'http://localhost:3000/posts/3',
data:{
title:"你好帅",
name:"蔡蔚蔚"
}
}).then(response=>{
console.log(response)
})
},
btns[3].onclick = function(){
axios({
method:'DELETE',
url:'http://localhost:3000/posts/4',
}).then( response => {
console.log(response)
})
}
</script>
</body>
</html>