一、简介
1.前端技术栈类比
二、ES6
1.let、const声明变量
{
// var 声明的变量往往会越域
// let声明的变量有严格局部作用域
var a = 1;
let b = 2;
}
console.log(a); //1
console.log(b); //b is not defined
{
// var可以声明多次
// let只能声明一次
var m = 1;
var m = 2;
let n = 1;
let n = 2;
console.log(m);//2
console.log(n);//n has already been declared
}
const a = 1;
a = 3;//声明之后不允许改变
2.解构表达式
<script>
let arr = [1,2,3];
//常规做法
// let a = arr[0];
// let b = arr[1];
// let c = arr[2];
//数组解构
let[a,b,c] = arr;
console.log(a,b,c)
const person = {
name: "jack",
age: 21,
language: ['java','js','css']
}
//常规做法
// const name = person.name;
// const age = person.age;
// const language = person.language;
//对象解构
const{name:abc,age,language} = person;
console.log(abc,age,language)
</script>
3.字符串扩展
let str = "hello.vue";
console.log(str.startsWith("hello"));//true
console.log(str.endsWith(".vue"));//true
console.log(str.includes("e"));//true
//字符串模板
let ss = `<div>
<span>hello world<span>
</div>`
console.log(ss);
//字符串插入变量和表达式,变量名写在${}
let info = `我是${abc},今年${age}岁了`
console.log(info);
4.函数优化
<script>
//1.函数参数默认值
function add2(a,b = 1){
return a + b;
}
console.log(add2(20))
//2.不定参数
function fun(...values){
console.log(values.length)
}
fun(1,2)//2
fun(1,2,3,4)//4
//3.箭头函数
var print = obj => console.log(obj);
print("箭头函数传入参数");
var sum = (a,b) => console.log(a+b);
sum(1,2);
//实战:箭头函数结合解构表达式
const person = {
name: "jack",
age: 21,
language: ['java','js','css']
}
var hello = (person) => console.log("hello"+person.name);
hello(person);
var hello = (person) => console.log("hello"+person.name);
hello(person);
var hello2 = ({name})=>console.log("hello2"+name);
hello2(person);
</script>
5.对象优化
<script>
const person = {
name: "jack",
age: 12,
language: ['java','js','css']
}
console.log(Object.keys(person)); //["name","age","language"] 返回三个key
console.log(Object.values(person)); //["jack",21,Array(3)] 返回三个值
console.log(Object.entries(person));//[Array(2),Array(2),Array(2)] 返回三个kv
const target = {a: 1};
const source1 = {b: 2};
const source2 = {c: 3};
Object.assign(target,source1,source2);
console.log(target);//{a: 1, b: 2, c: 3}
//2.声明对象简写
const age = 23;
const name = "张三";
//可以简写
const person1 = {age:age,name:name}
const person2 = {age,name}
//3.对行函数属性简写
const 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("香蕉");//jack在吃香蕉
person3.eat2("冰棍");//jack在吃冰棍
person3.eat3("苹果");//jack在吃苹果
//4.对象扩展运算符
//拷贝对象
let person4 = {name:"Amy",age:15}
let someone = {...person4}
console.log(someone)//{name: 'Amy', age: 15}
//合并对象
let age1 = {age:15}
let name1 = {name : "Amy"}
let p1 = {...age1,...name1}
console.log(p1)//{age: 15, name: 'Amy'}
</script>
6.map、reduce
<script>
//1.map()接收一个函数,将原数组的所有元素用这个函数处理后,放入新数组返回
let arr = ['1','20','-5','3']
// arr = arr.map((item) => {
// return item*2;
// });
arr = arr.map(item => item*2)
console.log(arr);//[2, 40, -10, 6]
//2.reduce
//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;
});
console.log(result)
</script>
7.Promise
<body>
<script>
//1、Promise可以封装异步操作
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("user.json")
.then((data)=>{
console.log("用户查询成功",data)
return get(`user_course_${data.id}.json`);
})
.then((data)=>{
console.log("课程查询成功",data)
return get(`couse_score_${data.id}.json`)
}).then((data)=>{
console.log("成绩查询成功",data)
});
</script>
</body>
</html>
8.模块化
导出
var name = "jack"
var age = 22
export{name,age}
const util = {
sum(a, b) {
console.log(a+b);
return a + b;
}
}
//不仅可以导出对象,一切js都可以导出
export{util}
导入
import util from "./hello.js"
import { name, age } from "./user.js"
util.sum(1,2);
console.log(name);