(1)var 声明的变量往往会越域,let 声明的变量有严格的局部作用域,如下:
(2)var 可以声明多次,let只能声明一次
(3)var 会变量提升,let不存在变量提升
(1)数组解构
let arr = [1,2,3]
使用 let [a,b,c]=arr 替代 a = arr[0],b=arr[1],c=arr[2]
(2)对象解构
const person = {
name:"jack",
age:21,
language:{'java','go','php'}
}
使用 const {name,age,language} = person 替换逐个获取
若需将对象 person 中的 name 赋值给其它变量,
则,const{name:var1,age,language} = person;
startsWith(str)
endsWith(str)
includes(str)
let html = `Hello,jack.I'm 23.
`;
let html = `${hello()},${name},我今年${age + 10}了`
function hello(){
return "hello";
}
(1)函数定参数
function add(a,b){
b = b || 1;//默认 b=1
return a + b;
}
console.log(add(10)) // 11
// 对 add() 优化
function add2(a,b=1){
return a+b;
}
(2)函数不定参数
function fun(...values){
console.log(values.length)
}
fun (1,2) // 2
fun(1,2,3,4) // 4
(3)箭头函数(lamda)
// 案例 1 一个参数一步到位
var print = function (obj){
console.log(obj)
}
print("hello") // 调用
// 对上函数进行优化
var print = obj => console.log(obj);
print("hello")
// 案例 2 二个参数一步到位
var sum2 = function(a,b){
return a+b;
}
// 对sum2优化
var sum2 = (a,b) => a+b;
// 案例 3 两个参数多步到位
var sum3 = (a,b) => {
c = a+b;
return a + c;
}
// 案例 4 对象参数
var hello2 = (obj) => console.log("hello",obj.name);
hello2(person); // hello,jack
// 案例 5 对象参数并解构
// 直接获取对象中的属性 name
var hello3 = (name) => console.log("hello",obj.name);
hello2(person); // hello,jack
(1)读取对象
const person = {
name:"jack",
age:21,
language:{'java','go','php'}
}
console.log(Object.keys(person)) // ['name','age','language']
console.log(Object.values(person)) // ['jack',21,Array(3)]
console.log(Object.entries(person)) // [Array(2),Array(2),array(2)]
(2)合并集合对象
const target = {a:1}
const source1 = {b:2}
const source2 = {c:3}
// 合并target,source1,source2,变成{a:1,b:2,c:3}
Object.assign(target,source1,source2)
console.log(target) // {a:1,b:2,c:3}
(3)声明对象
const age = 23
const name = mrdjun
// 以前
const person1 = {age:age,name:name}
// 优化,若属性与变量名一直,则可写成如下
const person2 = {age,name}
console.log(person2)
(4)对象函数属性简写
let person3={
name:'jack',
eat:function(food){
console.log(this.name+"吃"+food)
},
eat2: food => console.log(this.name+"吃"+food),
eat3 : food => console.log(person3.name+"吃"+food),
eat4 (food) {
console.log(this.name+"吃"+food);
}
}
person3.eat("香蕉") // jack吃香蕉
person3.eat2("香蕉") // 吃香蕉
person3.eat3("香蕉") // jack吃香蕉
结果说明箭头函数 this 不能使用,需要使用对象.属性的方式调用。
person3.eat4("香蕉") // jack吃香蕉
(5) 对象拓展运算符
拓展运算符 (...) 用于取出参数对象所有的可遍历属性然后拷贝到当前对象。
// 案例 1 拷贝对象(深拷贝)
let obj1 = {name:'jack',age:18}
let obj2 = {...person}
console.log(obj2) // {name:'jack',age:18}
// 案例 2 合并对象
let age1 = {age : 18}
let name1 = {name : "jack"}
let obj3 = {...age1,...name1}
console.log(obj3) // {name:'jack',age:18}
obj3 = {age : 19,name : "mrdjun"}
console.log(obj3) // {age : 19,name : "mrdjun"}
// 将 arr 数组中的每个元素处理后放回原来的数据
let arr = [1,20,-5,3]
// 案例 1
arr = arr.map((item)=>{
return item * 2;
})
// 案例 2
arr = arr(item => item*2)
/**
* reduce() 方法接收一个函数作为累加器,
* 数组中的每个值(从左到右)开始缩减,最终计算为一个值
* 四个参数:
* 1、initialValue 初始值(或者上一次回调函数的返回值 previousValue)
* 2、currentValue 当前元素值
* 3、index 当前索引
* 4、array 调用 reduce 的数组
*/
let res = arr.reduce((a,b)=>{
console.log("上一次处理后:"+a)
console.log("当前正在处理:"+b)
return a+b;
})
console.log(res) // 19
// 若多次嵌套ajax,如下
$.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);
}
});
// 使用 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) {
}
});
})