Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:
1.赋值
1.1值传递:原始类型,string,number,bool
例如:
let num1 = 10;
let num2 = num1;
// 此时num1和num2都是10
console.log(num1,num2);//10 10
num1 = 20;//更新num1
console.log(num2);//此时num1的值依然是10
// 说明原始类型是值传递,只传值不传地址
1.2引用传递:引用类型,object,array,引用类型是引用传递,例如:
let arr1 = [1,2,3,4,5];
let arr2 = arr1;
arr2[0]=10;//修改arr2的第一个属性,arr1的第一个也会被同步更新
console.log(arr1[0]);//10
2.传参
传参时无论什么类型,都是值传递,参数中对参数的更新并不会影响到入参
例如:
const func1=a=>a = 20;
let a = 10;
func1(a);
console.log(func1(a));//20
console.log(a);//10
解构赋值, 可以将属性/值从对象/数组中取出并赋值给其他变量,要求两边类型一致,如果是解构一个对象,外面需要加上大括号,以视一个代码块
1.数组解构:
let arr1 = [1,2,3];
let [a,b,c]=arr1;
console.log(a,b,c);//123
也可以给变量添加默认值:
let [d,e,f,g=10] = arr1;
console.log(d,e,f,g);//1 2 3 10
也可以把数组中的几个值打包成数组赋值给一个变量:
let [h,i,...j]=[1,2,3,4,5,6,7];
console.log(j);//[ 3, 4, 5, 6, 7 ]
2.对象解构
对象解构要求属性名与变量名必须一一对应,顺序不管
({age,name}={name:"Jasper",age:18});
console.log(age,name);//18 Jasper
3.参数解构
1.数组传参
例如:
let mult = ([num1,num2])=>num1*num2;
console.log(mult([12,5]));//60
对象传参:
let userInfo = ({uName,uAge})=>[uName,uAge];
console.log(userInfo({uName:'Jasper',uAge:18}));//Array [ "Jasper", 18 ]
1,call,apply,bind都是Fuction.prototype的方法,所有的function都具有的方法。
2,并且都是可以改变函数内部this指向的方法
1.call和apply都是在调用之后立即执行,而bind调用后需要再调用一次
2.apply的第二个参数必须是数组
用代码进行演示:
let a = {
name:'Jasper',
age:18
};
let b = {
name:"Peter",
age:28
};
function infoA(){
console.log(`姓名:${this.name}年龄${this.age}`);
};
function infoB(name,age){
this.name = name;
this.age = age;
console.log(`姓名:${this.name}年龄${this.age}`)
}
//bind()只返回一个函数声明,不会立即执行
infoA.bind(a)();//把this指向了对象a,姓名:Jasper年龄18
// call()会立即执行:
infoA.call(b);//姓名:Peter年龄28
// apply()的不同之处在于,第二个参数是一个数组:例如:
infoB.apply(a,["Andy",19]);//姓名:Andy年龄19
在js中方法也是以object的形式存在,可以以属性的方式来进行抽象,js的属性提供了两类属性get/set,get是一种获得属性值的方法,set是一种设置属性值的方法,我们可以将方法伪造成一个属性
例如:
let info = {
data:[
{name:"Lee",income:3000},
{name:"Zhang",income:3800},
{name:"Luo",income:5000}
],
// get方法可以获取值
get totalIncome(){
let total=0;
for(let i=0;i<this.data.length;i++){
total+=this.data[i].income;
}
return total;
},
//set方法可以改变值
set changeIncom(income){
this.data[0].income=income;
}
};
console.log(info.totalIncome);//11800
// set是一种设置属性值的方法,所以改变值的时候要用=而不是()
info.changeIncom=3900;
console.log(info.data[0].income);//3900
1.多分支:if(){}else if(){}:在判断多个区间的时候使用
2.switch case适合用来判断精确的值,具有执行效率更高的优点
3.三元表达式:表达式 (expr1) ? (expr2) : (expr3),判断是true则执行?后面的,是false则执行后面的,对于简单的条件判断,用三元表达式,要简洁干练的多