批改状态:合格
老师批语:
变量值传递与引用传递的应用场景有两个,一是赋值,二是传参。赋值时,原始类型的数据用的是值传递,引用类型的数据用的是引用传递。传参时不论什么类型的数据都是采用值传递。
原始类型有 string number boolean,举例如下
let a = 1;let b = a;a = 5;console.log(b);console.log(a);
打印出来b = 1, a = 5
b在赋值后,a重新赋值,并不影响b的值。
引用类型的 对象和数组,举例如下
let zhangSan ={name:"张三",age: 24,};let xiaoZhang = zhangSan;console.log(zhangSan);console.log(xiaoZhang);zhangSan.name = "小张";console.log(zhangSan);console.log(xiaoZhang);
第一次打印zhangSan = xiaoZhang
当改变zhangSan的name属性后,
第二次打印zhangSan的内容依然和xiaoZhang一样
数组和对象解构就是将数组中的值或者对象中的属性值赋值给变量。
let a =["张三","李四","王五"];let[zhangsan,lisi,wangwu] = a;console.log(zhangsan,lisi,wangwu);
打印出来的值为张三 李四 王五
let a =["张三","李四","王五"];let[zhangsan,lisi,wangwu,maliu] = a;console.log(zhangsan,lisi,wangwu,maliu);
打印出来的值为张三 李四 王五 undefined
undefined 表示声明未被赋值(初始化)的变量
let a =["张三","李四"];let[zhangsan,lisi] = a;console.log(zhangsan,lisi);
打印出来的值为张三 李四
对象解构赋值时定义的变量名要和属性同名
let {name,age} = {name:"张三",age:24};console.log(name,age);
打印出来为张三 24
还有一种情况,如果对象的属性名和之前的变量重名,需要在定义变量时使用别名得到赋值,打印变量时要使用别名
let name;let {name:xiaozhang,age} = {name:"张三",age:24};console.log(xiaozhang,age);
let sum =([a,b]) => a + b;console.log(sum([100,200]));
let student = ({name,age}) => `学生的姓名为${name},年龄为${age}`;console.log(student({name:"张三",age:24}));
先举例子,再说明区别,例子如下
let student = {name:"张三",age:24,zuhe:function(banji){return `该学生的姓名是${this.name},年龄是${this.age},年级是${banji}`;}};let lisi = {name:"李四",age:28,};console.log(student.zuhe.call(lisi,"三年级"));console.log(student.zuhe.apply(lisi,["三年级"]));console.log(student.zuhe.bind(lisi,"三年级")());
1、call,apply,bind三个均是函数的原型方法,作用是改变this的指向对象
2、三个方法的第一个参数是指向对象,后面的参数为实参列表,没有可以不写
3、apply的传入参数需要通过数组的方式传入
4、bind方法只是返回函数,不会立即调用,如果需要调用后面加小括号()
访问器属性的本质是对象的方法(函数),伪造成对象的属性进行调用。
let student = {name:"张三",age:24,get zuhe(){return `该学生的姓名是${this.name},年龄是${this.age}`;},set xiugai(name){return this.name = name;}};console.log(student.zuhe);student.xiugai = "李四";console.log(student.zuhe);
get关键字是获取对象属性值,如果访问器属性仅仅是为了使用属性值,采用该关键字
set关键字是设置或者修改对象的属性值,需要修改属性值,采用该关键字
let louceng = 3;switch(true){case louceng == 1:console.log("1楼");break;case louceng == 2:console.log("2楼");break;case louceng == 3:console.log("3楼");break;case louceng == 4:console.log("4楼");break;default:console.log("未知错误");}
let fenShu = 82;if(fenShu <0){console.log("超出范围");}else if(fenShu <60){console.log("不及格");} else if(fenShu >=60 && fenShu <80){console.log("合格");} else if(fenShu >=80 && fenShu <90){console.log("良好");} else if(fenShu >=90 && fenShu <=100){console.log("优秀");} else if(fenShu >100){console.log("超出范围");}else{console.log("未知错误");}
条件 ? true : false
实例如下
let xingbie = "男";xingbie == "女" ? console.log("女") : console.log("男");
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号