博客列表 >JS高阶知识——值传递/引用传递—模板字面量—解构赋值—对象字面量—函数bind()、call()、apply()方法—访问器属性—流程控制/判断语句

JS高阶知识——值传递/引用传递—模板字面量—解构赋值—对象字面量—函数bind()、call()、apply()方法—访问器属性—流程控制/判断语句

小雨丶
小雨丶原创
2021年01月07日 15:57:24788浏览
值传递&&引用传递
  1. 数据类型:值类型和引用类型
  2. 值传递:基本数据类型
  3. 引用传递:引用类型
  4. 函数传参: 无论什么类型,都是值传递
  5. 函数中对参数的更新,并不会影响到入参:
  6. const fn = x => (x = 10);
  7. let x = 5;
  8. fn(x);
  9. console.log(x);
  10. 输出的结果是5//这表示函数中对参数的更新,不会影响传入的参数在函数外的值
  11. 引用类型的更新,是全新赋值才是更新,修改其中的一项或者几项不算更新了引用类型的值,所以引用类型的参数也属于值传递
  12. 深拷贝: 值的操作
  13. 浅拷贝: 值所在内存地址的操作
模板字面量: 将表达式嵌入到字符串
  1. 传统的方式:
  2. let a =1, b=2;
  3. let res = a + " + " + b + " = " + (a + b);
  4. 模板字面量方式:
  5. res = `${ a } + ${ b } = ${a + b}`;
  6. 模板字面量的组成
  7. 使用反引号``,
  8. 里面的变量用${}囊括
  9. *模板字面量创建多行字符串可以保留格式
  10. let menu = ['首页', '视频', '文章'];
  11. let htmlStr = `<ul>
  12. <li>${menu[0]}</li>
  13. <li>${menu[1]}</li>
  14. <li>${menu[2]}</li>
  15. </ul>`
  16. 输出的就是HTML标签
  17. document.body.insertAdjacentHTML("beforeEnd", htmlStr); //将标签插入HTML中
  18. 自定义模板自变量的行为
  19. 模板自变量可以作为参数,不用写小括号
  20. 作为参数的条件:
  21. 第一个参数: 模板字面量中的字符串字面量组成的数组
  22. 从第二个参数开始,将模板字面量中的变量一次传入
解构赋值
解构赋值: 快速从集合数据(数组/对象)解构出独立变量
  1. 数组
  2. [a, b, ...c] = [1, 2, 3, 4, 5];
  3. [,,a,,] = [1, 2, 3, 4, 5];// a = 3;
  4. console.log((a, b, c));//输出的a是1,b是2,c是[3, 4, 5]的数组
  5. 利用解构去掉数组中的a
  6. [a, ...ar] = [1, 2, 4, 4]
  7. console.log(a); //1
  8. console.log(ar); //[2, 4, 4]
  9. 对象
  10. let email = "admin@php.cn"
  11. let { role, email: userEmail } = { role: "user", emial: "user@php.cn" }
  12. console.log(userEmail);//输出user@php.cn
  13. console.log(email);//输出admin@php.cn
  14. 参数解构
  15. 解构是用相同类型的两组进行比较,最后拿到符合条件的一组新的,不改变原有数据
  16. 数组传参
  17. let sum = ([a+ b]) => a+b;
  18. console.log(sum([10,20]));
  19. 对象传参
  20. let getUser = ({name, email} => [name, email]);
  21. console.log(getUser({email: 'tp@.php.cn', name: '天蓬老师'}));
对象字面量的简化
  1. 当属性与同一个作用域中的变量同名时,可以直接用属性来引用变量值
  2. `let user = {
  3. userName: '天蓬',
  4. userEmail: 'admin@php.cn',
  5. getInfo: function() {
  6. return `${this.userName}(${this.userEmail})`;
  7. }
  8. }
  9. let {userName, userEmail} = user;
  10. users = {
  11. userName,
  12. userEmail,
  13. getInfo: function() {
  14. return `${this.userName}(${this.userEmail})`;
  15. }
  16. }
  17. console.log(users.getInfo());`
  18. 函数也可以简写,去掉: function——不用定义直接写函数

this 说明,this指向定义它的函数,不是调用,this存在于作用域中,对象是没有作用域的,只有函数或块是有作用域的;

函数自带的方法
bind()
  1. bind()主要作用是操作this的指向,将一个函数绑定到一个对象上,函数中的this便是绑定的这个对象,而不是函数自身
  2. function hello(name){
  3. this.name = name;
  4. console.log(this.name);
  5. }
  6. const obj = {
  7. name: 'admin',
  8. }
  9. //将hello绑定到obj对象上去
  10. let f = hello.bind(obj,'天蓬老师');
  11. f();
call()/apply()
  1. call用法跟bind()类似,只是call()会立即调用
  2. apply()跟call用法类似,只是apply()仅用于后边传递的参数是数组形式
访问器属性
  1. 将方法伪造成一个属性
  2. X对象里面的方法fn()
  3. get 定义:
  4. get fn() {}
  5. 在调用的时候x.fnfnX的属性,而不是一个函数
  6. 同理 set 定义也是一样,但是用set定义需要有个参数
  7. get/set定义的伪属性名字不要跟其他属性重复,会冲突
流程控制——条件判断
  1. if——else
  2. switch:属于严格模式,单值判断
  3. switch (true/false) {
  4. case 条件语句 :
  5. 执行语句 ;
  6. break;
  7. case 条件语句 :
  8. 执行语句 ;
  9. break;
  10. default: //都不匹配
  11. 执行语句;
  12. }
  13. 三元运算符:
  14. 条件 ? true : false;
  15. 三元运算符可以直接对简单的条件进行判断并处理,但是不适用于复杂的语句,优先级也略差,如果同一行有赋值之类的,最好用小括号括起来三元运算符。
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议