Blogger Information
Blog 20
fans 0
comment 0
visits 14967
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
JS学习小结(值传递与引用传递、数组和对象解构、访问器属性、call\apply\bind、多分支与switch、三元运算符)
庖丁
Original
665 people have browsed it

1.变量值传递与引用传递的区别

变量值传递与引用传递的应用场景有两个,一是赋值,二是传参。赋值时,原始类型的数据用的是值传递,引用类型的数据用的是引用传递。传参时不论什么类型的数据都是采用值传递。

一、原始类型赋值时采用值传递

原始类型有 string number boolean,举例如下

  1. let a = 1;
  2. let b = a;
  3. a = 5;
  4. console.log(b);
  5. console.log(a);

打印出来b = 1, a = 5
b在赋值后,a重新赋值,并不影响b的值。

二、引用类型赋值时采用引用传递

引用类型的 对象和数组,举例如下

  1. let zhangSan ={
  2. name:"张三",
  3. age: 24,
  4. };
  5. let xiaoZhang = zhangSan;
  6. console.log(zhangSan);
  7. console.log(xiaoZhang);
  8. zhangSan.name = "小张";
  9. console.log(zhangSan);
  10. console.log(xiaoZhang);

第一次打印zhangSan = xiaoZhang
当改变zhangSan的name属性后,
第二次打印zhangSan的内容依然和xiaoZhang一样

2.数组和对象解构的常用方法和函数传参

数组和对象解构就是将数组中的值或者对象中的属性值赋值给变量。

一、数组解构

变量数和数组元素个数一一对应

  1. let a =["张三","李四","王五"];
  2. let[zhangsan,lisi,wangwu] = a;
  3. console.log(zhangsan,lisi,wangwu);

打印出来的值为张三 李四 王五

变量数>数组元素个数,多出的变量没有得到赋值,会打印出undefined

  1. let a =["张三","李四","王五"];
  2. let[zhangsan,lisi,wangwu,maliu] = a;
  3. console.log(zhangsan,lisi,wangwu,maliu);

打印出来的值为张三 李四 王五 undefined
undefined 表示声明未被赋值(初始化)的变量

变量数<数组元素个数,前面的数组元素会被赋值给变量,剩下的不会

  1. let a =["张三","李四"];
  2. let[zhangsan,lisi] = a;
  3. console.log(zhangsan,lisi);

打印出来的值为张三 李四

二.对象解构赋值

对象解构赋值时定义的变量名要和属性同名

  1. let {name,age} = {name:"张三",age:24};
  2. console.log(name,age);

打印出来为张三 24
还有一种情况,如果对象的属性名和之前的变量重名,需要在定义变量时使用别名得到赋值,打印变量时要使用别名

  1. let name;
  2. let {name:xiaozhang,age} = {name:"张三",age:24};
  3. console.log(xiaozhang,age);

参数解构

数组传参

  1. let sum =([a,b]) => a + b;
  2. console.log(sum([100,200]));

对象传参

  1. let student = ({name,age}) => `学生的姓名为${name},年龄为${age}`;
  2. console.log(student({name:"张三",age:24}));

3.call apply bind的区别

先举例子,再说明区别,例子如下

  1. let student = {
  2. name:"张三",
  3. age:24,
  4. zuhe:function(banji){
  5. return `该学生的姓名是${this.name},年龄是${this.age},年级是${banji}`;
  6. }
  7. };
  8. let lisi = {
  9. name:"李四",
  10. age:28,
  11. };
  12. console.log(student.zuhe.call(lisi,"三年级"));
  13. console.log(student.zuhe.apply(lisi,["三年级"]));
  14. console.log(student.zuhe.bind(lisi,"三年级")());

1、call,apply,bind三个均是函数的原型方法,作用是改变this的指向对象
2、三个方法的第一个参数是指向对象,后面的参数为实参列表,没有可以不写
3、apply的传入参数需要通过数组的方式传入
4、bind方法只是返回函数,不会立即调用,如果需要调用后面加小括号()

4.访问器属性的原理

访问器属性的本质是对象的方法(函数),伪造成对象的属性进行调用。

  1. let student = {
  2. name:"张三",
  3. age:24,
  4. get zuhe(){
  5. return `该学生的姓名是${this.name},年龄是${this.age}`;
  6. },
  7. set xiugai(name){
  8. return this.name = name;
  9. }
  10. };
  11. console.log(student.zuhe);
  12. student.xiugai = "李四";
  13. console.log(student.zuhe);

get关键字是获取对象属性值,如果访问器属性仅仅是为了使用属性值,采用该关键字
set关键字是设置或者修改对象的属性值,需要修改属性值,采用该关键字

5.多分支与swith

一、swith用于多个单值判断,单值数量>=3

  1. let louceng = 3;
  2. switch(true){
  3. case louceng == 1:
  4. console.log("1楼");
  5. break;
  6. case louceng == 2:
  7. console.log("2楼");
  8. break;
  9. case louceng == 3:
  10. console.log("3楼");
  11. break;
  12. case louceng == 4:
  13. console.log("4楼");
  14. break;
  15. default:
  16. console.log("未知错误");
  17. }

二、区间判断多个数值,应用if判断语句

  1. let fenShu = 82;
  2. if(fenShu <0){
  3. console.log("超出范围");
  4. }else if(fenShu <60){
  5. console.log("不及格");
  6. } else if(fenShu >=60 && fenShu <80){
  7. console.log("合格");
  8. } else if(fenShu >=80 && fenShu <90){
  9. console.log("良好");
  10. } else if(fenShu >=90 && fenShu <=100){
  11. console.log("优秀");
  12. } else if(fenShu >100){
  13. console.log("超出范围");
  14. }else{
  15. console.log("未知错误");
  16. }

6.三元运算符可以解决双分支判断的问题

条件 ? true : false
实例如下

  1. let xingbie = "男";
  2. xingbie == "女" ? console.log("女") : console.log("男");
Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post