批改状态:合格
老师批语:
<script>// 值传递有原生类型,字符串,数值,布尔,值传递的时候只传值,不会传地址,这样更改其中一个数值的时候不会一起更改let a=1;let b=a;a=2;//这两个都是原生类型,更改a后b不会更改值,b还是1//引用专递有对象,传递的时候值和地址一起传递,更改数值的时候回一起更改let obj1={a:1, b:2};let obj2=obj1;//更新obj1其中a的值obj1.a=10;//这时候obj2中的a也会更新//传递参数无论什么类型都是值传递const f1=(x)=>(x=10);let m=5;//把m传入到f1函数中,叫入参f1(m);//函数中对参数更新,不会影响到入参的值const f2=(x)=>(x.a=10);let o={a:1,b:2};//用o调用f2这个函数f2(o);//虽然o里面的a更新了,实际上不是引用传递,是值传递,因为对于引用类型,只有全新的赋值才是更新,修改其中单个属性不算const f3=(x)=>(x={a:1,b=1});f3(o);//深拷贝就是值传递,穿个值过去,就值和地址都过去了//浅拷贝就是引用传递,就给你个地址让你访问</script>
<script>//解构赋值就是快速从集合数据(对象/数组)解构出独立变量,常用于vue中//解构数组let [a,b,c]=[1,2,3];console.log(a, b, c);//变量名多数值少,多出的变量会显示默认值[a, b, c, d] = [1, 2, 3];//变量名少数值多,有几个变量名显示几个数值[a, b] = [1, 2, 3];//解析a、b,剩下都放进数组[a,b,...c]=[1,2,3,4,5];//单独解析某个值,它是第几位就在前面加几个逗号,后面也得加上[,,a,,]=[1,2,3,4,5];//两个变量交换值就可以直接用解构来弄,不用再弄中间数了let x = 1,y = 2,// 中间量t;console.log("x=%d,y=%d", x, y);t = y;y = x;x = t;console.log("x=%d,y=%d", x, y);// 用解构函数[y, x] = [x, y];console.log("x=%d,y=%d", x, y);//对象解析,变量名必须一样,顺序是无所谓let {id,name}={id:10,name:"手机"};console.log(id, name);//用已有变量名来解析会导致覆盖已有的值,可以用别名的方式来解析let email="as@qq.com"let {name,email:asemail}={name:"电脑",email:"sd@qq.com"}//这样访问asemail会访问后面的值,访问原先email会访问到原先的值//参数解构,//数组传参let sum=([a,b])=>a+b;console.log(sum([10, 20]));// 对象传参let getUser = ({ name, email }) => [name, email];console.log(getUser({ email: "php.con", name: "老师" }));</script>
<script>//创建函数function hello(name){this.name=name;console.log(this.name);}//创建一个对象const obj={name:"admin"};console.log(hello("朱老师"));//hello通过用bind绑定到obj上,因为需要参数,所以第二个写成参数let f = hello.bind(obj, "天蓬老师");//f()不会立刻执行,返回的是个函数声明console.log(f());//call/apply立即执行f = hello.call(obj, "灭绝老师");//这里就不用加括号了,因为是立即执行console.log(f);//用apply,参数必须数组f = hello.apply(obj, ["西门老师"]);console.log(f);</script>
<script>const product = {data: [{ name: "电脑", price: 5000, num: 5 },{ name: "手机", price: 4000, num: 10 },{ name: "相机", price: 7000, num: 3 },],//计算多少钱getAmounts() {return this.data.reduce((t, c) => (t += c.price * c.num), 0);},//访问器属性//通过方法伪造成一个属性//通过get从新创建一个方法//这样就可以用属性来打到方法的效果,这就是访问器属性get ta() {return this.data.reduce((t, c) => (t += c.price * c.num), 0);},//用ser来修改其中某一个数值set setPrice(price) {//this就是指向当前data中的第二个的price属性,然后让它等于传进来的参数this.data[1].price = price;},};console.log("总额:", product.getAmounts());//通过属性访问console.log("总额:", product.ta);//先访问一些原先的属性console.log(product.data[1].price);//然后从新赋值一个product.setPrice = 9000;//然后再访问一些console.log(product.data[1].price);console.log("--------------------");//访问器属性的优先级高于同名的普通属性</script>
<script>let cj=60;//单循环if(cj>=60){console.log('及格');}//加分支if(cj>=60){console.log('及格');}else{console.log('不及格');}//多分支if(cj>=60&&cj<=80){console.log('及格');}else if(cj>=80&&<=100){console.log('优秀')}else if(cj>100||cj<0){console.log('非法数据')}else{console.log('不及格')}//多分支用switch来写,switch是严格匹配,括号里面必须用truescore = 100;switch (true) {// 第一种情况case score >= 60 && score < 80:console.log("合格");// 跳出来break;case score >= 80 && score <= 100:console.log("优秀");// 跳出来break;case score > 100 && score < 0:console.log("问题");// 跳出来break;// 默认分支default:console.log("补考");}// 一般用在单值判断let response = "Success";// 传递的值有可能会出现大小写错误// toLowerCase()会把传入的字符串全部改为小写// toUpperCase()全部改为大写switch (response.toLowerCase()) {case "fail":console.log("请求失败");break;case "success":console.log("请求成功");break;default:console.log("位置分支");}</script>
<script>// 三元运算符简写法// 条件:如果为真执行第一个,如果为假执行第二个,中间用分号分开score = 50;console.log(score >= 60 ? "及格" : "补考");</script>
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号