博客列表 >JS值传递方式与访问器属性

JS值传递方式与访问器属性

陈强
陈强原创
2021年01月06日 11:56:00485浏览

值传递方式

赋值

  • 值传递: 原始类型,string,number,bool
  1. let a = 1;
  2. let b = a;
  3. //更新a的值为2
  4. a = 2;
  5. //输出b = 1,更新a的值,并不会影响b的值
  6. b = 1;
  • 引用传递: 引用类型, object,array
  1. let obj1 {
  2. id:1,
  3. name:'iphone',
  4. let obj2 = obj1;
  5. //更新obj1的属性
  6. obj1.name = 'vivo';
  7. //输出obj2;name也变成vivo,引用传递会同步更新
  8. obj2.name = 'vivo';
  9. }

传参

  • 传参时,不论什么类型,都是”值传递”
  • 入参: 调用函数是传入的参数,简称:”入参”
  1. let f1 = (x) => (x = 10);
  2. let m = 5;
  3. f1(m);
  4. console.log(m);
  5. //输出m=5 函数中对参数的更新,并不会影响到入参
  6. const f2 = x => (x.a = 10);
  7. let o = { a: 1, b: 2 };
  8. console.log(o);
  9. f2(o);
  10. console.log(o);
  11. //输出{a: 10,b: 2}
  12. // 看上去函数中对于o.a的更新生效,实际上仍是值传递

解构赋值

数组

  1. let [a, b, c] = [1, 2, 3];
  2. console.log(a, b, c);
  3. //输出 1,2,3
  4. let x = 1,
  5. y = 2;
  6. //x,y的值对换
  7. [x,y] = [y,x];

对象

  • 属性名与变量名必须一一对应,顺序无所谓
  1. let { id, name } = { id: 10, name: "手机" };
  2. //可以写成let {name,id}

参数解构

  1. // 数组传参
  2. let sum = ([a, b]) => a + b;
  3. console.log(sum([10, 20]));
  4. // 对象传参
  5. let getUser = ({ name, email }) => [name, email];
  6. console.log(getUser({ email: "tp@php.cn", name: "天蓬老师" }));

bind,call,apply函数

bind 不会立即执行,只返回一个函数声明

  1. function hello(name) {
  2. this.name = name;
  3. console.log(this.name);
  4. }
  5. let f = hello.bind(obj, "天蓬老师");
  6. //输出的是hello的函数声明
  7. console.log(f());

call/apply立即执行

  1. function getName(name) {
  2. this.name = name;
  3. console.log(name);
  4. }
  5. let f = getName.call(name, "jack");
  6. //apply需要是数组
  7. let f1 = getName.apply(name, ["Tom"]);

访问器属性

  • 将方法伪造成一个属性
  1. const product = {
  2. data: [
  3. { name: "电脑", price: 5000, num: 5 },
  4. { name: "手机", price: 4000, num: 10 },
  5. { name: "相机", price: 8000, num: 3 },
  6. ],
  7. //get用来获取参数
  8. get total() {
  9. return this.data.reduce((t, c) => (t += c.price * c.num), 0);
  10. },
  11. //set用来修改参数
  12. set setPrice(price) {
  13. this.data[1].price = price;
  14. },
  15. };
  16. console.log("总金额 :", product.total);
  17. product.setPrice = 9988;

运算符

swicth case

  1. let response = "Success";
  2. switch (response.toLowerCase()) {
  3. case "fail":
  4. console.log("请求失败");
  5. break;
  6. case "success":
  7. console.log("请求成功");
  8. break;
  9. default:
  10. console.log("未知错误");
  11. }

三元运算符

  • 三元运算符用来简化双分支
  • 格式:条件 ? true : false
  1. score = 80;
  2. console.log(score >= 60 ? "及格" : "补考");
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议