文章目录
- 一、es6
- 1.1 前端概述
- 1.2 js es6 新特性
- 1.2.1 let和constant
- 1.2.2解构函数和结构化代码块
- 1.2.3函数相关
- 1.2.4对象新增api
- 1.2.5数组新增api
- 1.2.6promise
- 1.2.5模块化
- 二、vue
- 2.1 vue的核心概念
一、es6
1.1 前端概述
首先来看下前后端各个部分对比
ps:es是规范 js实现 JS是由ES(ECMAScript)、DOM(浏览器文档对象)、BOM(浏览器对象模型)组成。其中Node.Js就只有ES,目前浏览器比较流行的版本就是ES6(ES2015),老浏览器的版本基本上都是ES5。所以alert和document不能在Node运行(因为Node没有dom和bom)。
<script>
// var 声明的变量往往会是全局的
// let 声明的变量有严格局部作用域
{
var a = 1;
let b = 2;
}
console.log(a); // 1
console.log(b); //会报错b is not defined
// var 可以多次声明
// let 只能声明一次
var m = 4
var m = 5
let n = 6
// 这边我们如果在 let n=4就不行了
console.log(m) // 2
console.log(n) // 会出错has already been declared
// var 会变量提升
// let 不存在变量提升
console.log(x); // undefined
var x = 10;
console.log(y); //y is not defined
let y = 20;
// let
// const声明之后不允许改变,类似java的final的修饰符并且必须初始化
const a = 1;
a = 3; //Assignment to constant variable.
</script>
<script>
//数组解构
let myArr = [1,2,3];
//之前我们的赋值办法
// let a = arr[a];
//es6有解构之后
let [a,b,c] = arr;
console.log(a,b,c)
//同样对对象来说也可以
const person = {
name: "lujun",
ages: 21,
language: ['java', 'js', 'css']
}
//之前我们的做法和java一样都是点出来赋值
// const ages = person.ages;
//对象解构
// 可以改变属性名比如name:abc
const { name: a, age, language } = person;
console.log(a, age, language) //lujun 21 ['java', 'js', 'css']
//4、字符串新增的api
let str = "helloworld";
console.log(str.startsWith("hello"));//true
console.log(str.endsWith("ld"));//true
console.log(str.includes("e"));//true
console.log(str.includes("hello"));//true
//字符串模板 ``可以定义多行字符串
let ss = `<div>
<span>hello world<span>
</div>`;
console.log(ss);
function fun() {
return "这是一个函数"
}
// 2、插入表达式。变量名写在 ${} 中,${} 中可以放入字符串和函数。
let info = `他是${abc}语言,今年${age + 10}了, 这是我的一个函数,他的功能是: ${fun()}`;
console.log(info);
</script>
<script>
//1.默认值:这是一个简单的加法函数 但是问题来了如果我们想给a一个默认值怎么办?我们只有在函数体内加一个判断是不是为空
function add(a, b) {
return a + b;
}
//现在可以这么写:
function addByEs6(a, b = 1) {
return a + b;
}
//2.不定参数(和java有点像)
function fun(...values) {
console.log(values)
}
//3)、箭头函数。lambda
//以前声明一个方法(单个参数)
var printOld = function fun(a){
print(a)
}
var print = a => console.log(a);
print("hello");
// 如果是多个参数怎么怎么写 其实就是参数加一个括号 代码不是一句的话加代码块
var sumByOld = function (a, b) {
c = a + b;
return a + c;
}
var sum2 = (a, b) => a + b;
//有返回值
var sum3 = (a, b) => {
c = a + b;
return a + c;
}
const person = {
name: "lujun",
ages: 21,
language: ['java', 'js', 'css']
}
//以前我们想要 获取对象的成员变量
function hello(person) {
console.log("hello," + person.name)
}
//现在我们可以简写:箭头函数+解构
var hello2 = ({name}) => console.log("hello," +name);
hello2(person);
</script>
<script>
const person = {
name: "lujun",
ages: 21,
language: ['java', 'js', 'css']
}
//获取对象的所有key
console.log(Object.keys(person));//["name", "ages", "language"]
//获取对象的所有values
console.log(Object.values(person));//["lujun", 21, Array(3)]
//获取对象的所有key v
console.log(Object.entries(person));//[Array(2), Array(2), Array(2)]
const target = { a: 1 };
const source1 = { b: 2 };
const source2 = { c: 3 };
// 成员变量合并
//{a:1,b:2,c:3}
Object.assign(target, source1, source2);
console.log(target);//["name", "age", "language"]
//对象的简写
const age = 23
const name = "张三"
const person1 = { age: age, name: name }
// 等价于
const person2 = { age, name }//声明对象简写
console.log(person2);
//对象的函数属性简写
let person3 = {
name: "jack",
// 以前:
eat: function (food) {
console.log(this.name + "在吃" + food);
},
//箭头函数this不能使用,要使用的话需要使用:对象.属性
eat2: food => console.log(person3.name + "在吃" + food),
eat3(food) {
console.log(this.name + "在吃" + food);
}
}
person3.eat("香蕉");
person3.eat2("苹果")
person3.eat3("橘子");
// 1、拷贝对象(深拷贝)
let p1 = { name: "Amy", age: 15 }
let someone = { ...p1 }
console.log(someone) //{name: "Amy", age: 15}
// 合并对象
let age1 = { age: 15 }
let name1 = { name: "Amy" }
let p2 = {name:"zhangsan"}
p2 = { ...age1, ...name1 }
console.log(p2)
</script>
map():接收一个函数,将原数组中的所有元素用这个函数处理后放入新数组返回。
reduce() 为数组中的每一个元素依次执行回调函数,不包括数组中被删除或
从未被赋值的元素,
<script>
//数组中新增了map和reduce方法。
let arr = ['1', '20', '-5', '3'];
//map():接收一个函数,将原数组中的所有元素用这个函数处理后放入新数组返回。
// arr = arr.map((item)=>{
// return item*2
// });
arr = arr.map(item=> item*2);
console.log(arr);
//reduce() 为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素,
//[2, 40, -10, 6]
//arr.reduce(callback,[initialValue])
/**
1、previousValue (上一次调用回调返回的值,或者是提供的初始值(initialValue))
2、currentValue (数组中当前被处理的元素)
3、index (当前元素在数组中的索引)
4、array (调用 reduce 的数组)*/
let result = arr.reduce((a,b)=>{
console.log("上一次处理后:"+a);
console.log("当前正在处理:"+b);
return a + b;
},100);
console.log(result)
</script>
使用场景:我们需要分先后调用比如我们要先获取用户信息然后在查询用户的订单 如果只是两层我们很容易想到ajaxsuccess在发一次请求就好了 但是如果层次很深看起来就很乱
<script>
//1、查出当前用户信息
//2、按照当前用户的id查出他的课程
//3、按照当前课程id查出分数
//之前的做法
// $.ajax({
// url: "mock/user.json",
// success(data) {
// console.log("查询用户:", data);
// $.ajax({
// url: `mock/user_corse_${data.id}.json`,
// success(data) {
// console.log("查询到课程:", data);
// $.ajax({
// url: `mock/corse_score_${data.id}.json`,
// success(data) {
// console.log("查询到分数:", data);
// },
// error(error) {
// console.log("出现异常了:" + error);
// }
// });
// },
// error(error) {
// console.log("出现异常了:" + error);
// }
// });
// },
// error(error) {
// console.log("出现异常了:" + error);
// }
// });
//1、Promise可以封装异步操作
// let p = new Promise((resolve, reject) => { //传入成功解析,失败拒绝
// //1、异步操作
// $.ajax({
// url: "mock/user.json",
// success: function (data) {
// console.log("查询用户成功:", data)
// resolve(data);
// },
// error: function (err) {
// reject(err);
// }
// });
// });
//这边我们是可以链式调用的
// p.then((obj) => { //成功以后做什么
// return new Promise((resolve, reject) => {
// $.ajax({
// url: `mock/user_corse_${obj.id}.json`,
// success: function (data) {
// console.log("查询用户课程成功:", data)
// resolve(data);
// },
// error: function (err) {
// reject(err)
// }
// });
// })
// }).then((data) => { //成功以后干什么
// console.log("上一步的结果", data)
// $.ajax({
// url: `mock/corse_score_${data.id}.json`,
// success: function (data) {
// console.log("查询课程得分成功:", data)
// },
// error: function (err) {
// }
// });
// })
function get(url, data) {
return new Promise((resolve, reject) => {
$.ajax({
url: url,
data: data,
success: function (data) {
resolve(data);
},
error: function (err) {
reject(err)
}
})
});
}
get("mock/user.json")
.then((data) => {
console.log("用户查询成功~~~:", data)
return get(`mock/user_corse_${data.id}.json`);
})
.then((data) => {
console.log("课程查询成功~~~:", data)
return get(`mock/corse_score_${data.id}.json`);
})
.then((data)=>{
console.log("课程成绩查询成功~~~:", data)
})
.catch((err)=>{ //失败的话catch
console.log("出现异常",err)
});
</script>
类似java中导包
模块功能主要有两个命令构成 export 暴露和import导入
var name = "jack"
var age = 21
function add(a,b){
return a + b;
}
// 导出变量和函数
export {name,age,add}
// export const util = {
// sum(a, b) {
// return a + b;
// }
// }
// 使用
import abc from "./hello.js"
import {name,add} from "./user.js"
二、vue
2.1 vue的核心概念
MVVM思想( 本质上是MVC的改进版 主要任务是分离视图View和模型model 思想是数据模型数据双向绑定)
- M:model 包括数据和一些基本操作
- V:view 视图,页面渲染结果
- VM:View-model,模型与视图间的双向操作