批改状态:合格
老师批语:
1.值传递
值传递适用的数据类型为:原始类型包括string,number,bool等主要特征是互不影响,只是传递值
let a=1;let b=a;console.log(a,b);a=2;//更新a,不影响b,b没有变化console.log(a,b);
let obj1={a:1,b:2};let obj2=obj1;obj1.a=10;console.log(obj1);//obj2中的a值也变成了10console.log(obj2);
1.模板字面量
将表达式嵌入到字符串。使用反引号``。
let a=1;b=2;let res=a+"+"+b+"="+(a+b);console.log(res);//模板字面量res=`${a}+${b}=${a+b}`;console.log(res);
2.标签函数
自定义模板字面量的行为
使用自定义函数来处理模板字面量,它的参数约定
第一个参数:模板字面量中的字符串字面量组成的数组
从第二个参数开始,将模板字面量中的变量依次传入
let sum=(strs,a,b)=>{console.log(strs);console.log(a,b);};sum`${a}+${b}=`;
快速从集合数据(数组/对象)解构出独立变量
let [a,b,c]=[1,2,3];console.log(a,b,c);
let {id,name}={id:10,name:"电脑"};console.log(id,name);//属性名与变量名必须对应,顺序无所谓({name,id}={name:"电脑",id:20});
let sum=([a,b])=>a+b;console.log([1,2]);
对象传参
let user=({name,id})=>({name,id});console.log(user({name:"你好",id=2}));
对象字面量的简化
let user={userName:"老师",userEmail:"tp@php.cn",getInfo:function(){return `${this.userName}(${this.userEmail})`;}}console.log(user.getInfo());let {userName,userEmail}={userName:"师傅",userEmail:"qq@163.com"};user={//当属性名与同一个作用域的变量名一样,可以直接使用属性名来引用该变量的值userName,userEmail,getInfo(){return `${this.userName}(${this.userEmail})`;}}console.log(user.getInfo());user={userName,userEmail,getInfo:()=>`${this.userName}(${this.userEmail})`,//this指向了window因为对象没有作用域,所以会this会逐层搜寻直到windowtest:()=>console.log(this),}console.log(user.getInfo());
bind的作用就是将this指向改变。
call,apply跟bind的区别就是,bind只是返回一个函数声明,不会执行,而call,apply会立即执行
<button>按钮</button><script>function hello(name){this.name=name; console.log(this.name);}const obj={name:'admin'};//给 obj 绑定 hello函数 bind() 不会立即执行,只返回一个函数声明let f=hello.bind(obj,'同学');//加上()才会执行console.log(f());//call接收一个变量f=hello.call(obj,"数学老师");console.log(f);//apply接收一个数组参数f=hello.apply(obj,['语文老师']);console.log(f);
就是将对象里的方法变为属性
使用get和set来定义,get是得到属性的值,set设置属性的值
const product={data:[{name:"手机",price:3000,num:3},{name:"电脑",price:5000,num:5},{name:"相机",price:7000,num:2},],getAmounts(){return this.data.reduce((t,c)=>(t +=c.price * c.num),0);},}console.log("总额:",product.getAmounts());products={data:[{name:"手机",price:3000,num:3},{name:"电脑",price:5000,num:5},{name:"相机",price:7000,num:2},],get getAmounts(){return this.data.reduce((t,c)=>(t+=c.price*c.num),0);},set getAmounts(price){this.data[1].price=price;}}products.getAmounts=3000;console.log(products.data[1].price);console.log("总额:",products.getAmounts);
if分支是用来控制区间值,switch一般用来单值
let a=2;if(a>=1){console.log('大了');}else{console.log('小了');}let b=success;switch(b){case "fail":console.log('失败');break;case "success":console.log('成功');break;default: console.log('平局');}
方便简单简化代码。但只能用来控制简单的流程。
let score=40(score>60)?'合格':'失败';
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号