批改状态:合格
老师批语:
数据类型:值类型和引用类型值传递:基本数据类型引用传递:引用类型函数传参: 无论什么类型,都是值传递函数中对参数的更新,并不会影响到入参:const fn = x => (x = 10);let x = 5;fn(x);console.log(x);输出的结果是5;//这表示函数中对参数的更新,不会影响传入的参数在函数外的值引用类型的更新,是全新赋值才是更新,修改其中的一项或者几项不算更新了引用类型的值,所以引用类型的参数也属于值传递深拷贝: 值的操作浅拷贝: 值所在内存地址的操作
传统的方式:let a =1, b=2;let res = a + " + " + b + " = " + (a + b);模板字面量方式:res = `${ a } + ${ b } = ${a + b}`;模板字面量的组成使用反引号``,里面的变量用${}囊括*模板字面量创建多行字符串可以保留格式let menu = ['首页', '视频', '文章'];let htmlStr = `<ul><li>${menu[0]}</li><li>${menu[1]}</li><li>${menu[2]}</li></ul>`输出的就是HTML标签document.body.insertAdjacentHTML("beforeEnd", htmlStr); //将标签插入HTML中自定义模板自变量的行为模板自变量可以作为参数,不用写小括号作为参数的条件:第一个参数: 模板字面量中的字符串字面量组成的数组从第二个参数开始,将模板字面量中的变量一次传入
数组[a, b, ...c] = [1, 2, 3, 4, 5];[,,a,,] = [1, 2, 3, 4, 5];// a = 3;console.log((a, b, c));//输出的a是1,b是2,c是[3, 4, 5]的数组利用解构去掉数组中的a[a, ...ar] = [1, 2, 4, 4]console.log(a); //1console.log(ar); //[2, 4, 4]对象let email = "admin@php.cn"let { role, email: userEmail } = { role: "user", emial: "user@php.cn" }console.log(userEmail);//输出user@php.cnconsole.log(email);//输出admin@php.cn参数解构解构是用相同类型的两组进行比较,最后拿到符合条件的一组新的,不改变原有数据数组传参let sum = ([a+ b]) => a+b;console.log(sum([10,20]));对象传参let getUser = ({name, email} => [name, email]);console.log(getUser({email: 'tp@.php.cn', name: '天蓬老师'}));
当属性与同一个作用域中的变量同名时,可以直接用属性来引用变量值`let user = {userName: '天蓬',userEmail: 'admin@php.cn',getInfo: function() {return `${this.userName}(${this.userEmail})`;}}let {userName, userEmail} = user;users = {userName,userEmail,getInfo: function() {return `${this.userName}(${this.userEmail})`;}}console.log(users.getInfo());`函数也可以简写,去掉: function——不用定义直接写函数
this 说明,this指向定义它的函数,不是调用,this存在于作用域中,对象是没有作用域的,只有函数或块是有作用域的;
bind()主要作用是操作this的指向,将一个函数绑定到一个对象上,函数中的this便是绑定的这个对象,而不是函数自身function hello(name){this.name = name;console.log(this.name);}const obj = {name: 'admin',}//将hello绑定到obj对象上去let f = hello.bind(obj,'天蓬老师');f();
call用法跟bind()类似,只是call()会立即调用apply()跟call用法类似,只是apply()仅用于后边传递的参数是数组形式
将方法伪造成一个属性X对象里面的方法fn()用get 定义:get fn() {}在调用的时候x.fn,fn是X的属性,而不是一个函数同理 set 定义也是一样,但是用set定义需要有个参数用get/set定义的伪属性名字不要跟其他属性重复,会冲突
if——elseswitch:属于严格模式,单值判断switch (true/false) {case 条件语句 :执行语句 ;break;case 条件语句 :执行语句 ;break;default: //都不匹配执行语句;}三元运算符:条件 ? true : false;三元运算符可以直接对简单的条件进行判断并处理,但是不适用于复杂的语句,优先级也略差,如果同一行有赋值之类的,最好用小括号括起来三元运算符。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号