一、js值传递

js的值传递方式有2种,分别是赋值传递引用传递

1、赋值传递:

变量赋值,赋值后数据被更新,实现基本数据类型的传递,基本数据类型:string,number,boolean,null,undefined,symbol 。

  1. let a = 1;
  2. let b = a;
  3. // 值传递,只在基本类型之间存在,数值,字符串。。。
  4. console.log("a = %d, b = %d", a, b);
  5. // 更新 a
  6. a = 2;
  7. console.log("a = %d, b = %d", a, b);

2、引用传递:

适用于引用类型:对象,数组。引用本身不会被修改,但其属性值可以被修改且只能通过属性修改。

  1. let obj1 = {
  2. a: 1,
  3. b: 2,
  4. };
  5. console.log("obj1 = %o", obj1);
  6. let obj2 = obj1;
  7. console.log("obj2 = %o", obj2);
  8. console.log(obj1 === obj2);
  9. // 更新obj1
  10. // 对象使用点语法来访问内部的成员
  11. obj1.a = 10;
  12. console.log("obj1 = %o", obj1);
  13. console.log("obj2 = %o", obj2);

  1. //传参: 永远是值传递
  2. const f1 = (x) => (x = 10);
  3. let m = 5;
  4. // m: 入参
  5. // 当前传入的是一个基本类型,原始类型,整数
  6. f1(m);
  7. console.log(f1(m));
  8. console.log("m = %d", m);
  9. // const f2 = (x) => (x.a = 10);
  10. const f2 = (x) => (x = {});
  11. let o = { a: 1, b: 2 };
  12. f2(o);
  13. console.log("o.a = ", o.a);
  14. // 深拷贝: 值传递
  15. // 浅拷贝: 引用传递

二、模板字面量及标签函数

1、模板字面量:

模板字面量常用特性支持字符串、插值,可以在一个连续定义中插入一个或多个变量的值。

  1. // 1. 模板字面量: 将表达式/插值嵌入到字符串
  2. // 0 1 2
  3. let menus = ["首页", "视频", "文章"];
  4. let htmlStr = `
  5. <nav>
  6. <a href="">${menus[0]}</a>
  7. <a href="">${menus[1]}</a>
  8. <a href="">${menus[2]}</a>
  9. </nav>
  10. `;
  11. // 模板字面量内部有二部分组成: 字符串字面量, 变量插值
  12. // <nav>
  13. // <a href=""> </a></nav> //字符串字面量
  14. // ${menus} //变量插值
  15. console.log(htmlStr);
  16. document.body.insertAdjacentHTML("beforeEnd", htmlStr);

2、标签函数:

标签函数本身就是一个常规函数,通过前缀到模板字面量来应用自定义行为。标签函数接受的参数依次时原始字符串数组和对每个表达式求值的结果,这个函数的返回值是对模板字面量求值得到的字符串。

  1. // 2. 标签函数,自定义模板字面量的一些行为
  2. // 参数约定
  3. // 1. 第一个参数: 所有字符串字面量组成的数组
  4. // 2. 第二个参数: 插值组成的数组
  5. let sum = (strs, a, b) => {
  6. console.log(strs);
  7. console.log(a, b);
  8. };
  9. let a = 45;
  10. b = 28;
  11. sum`${a} + ${b} = `;
  12. // rest: 归并参数
  13. sum = (strs, ...args) => {
  14. console.log(strs);
  15. console.log(args);
  16. };
  17. let c = 38;
  18. sum`${a} + ${b} + ${c} = `;

三、参数解构

解构赋值提供了一个方便的地从对象或数组中提取数据的方法,分数组解构,对象解构,参数解构

1、数组解构:

  1. // 1. 数组解构
  2. // 等号左边是右边的模板,必须长得一样
  3. let [a, b, c] = [1, 2, 3];
  4. console.log(a, b, c); //返回1 2 3
  5. [a, b] = [1, 2, 3];
  6. console.log(a, b); //返回1 2
  7. [a, b, c = "js"] = [1, 2];
  8. console.log(a, b, c); //反馈1 2 “js”
  9. [a, b, ...c] = [1, 2, 3, 4, 5, 6];
  10. console.log(a, b, ...c); //返回1 2 3 4 5 6
  11. [, , , a, ,] = [1, 2, 3, 4, 5, 6];
  12. console.log(a); //返回 4
  13. let x = 1,
  14. y = 2,
  15. t;
  16. console.log(x, y);
  17. t = x;
  18. x = y;
  19. y = t;
  20. console.log(x, y);
  21. let a = 10,
  22. b = 20;
  23. console.log("a = %d, b = %d", a, b);
  24. [b, a] = [a, b];
  25. console.log("a = %d, b = %d", a, b);

2、对象解构:

对象解构是获取对象并将其内部属性提取到对象外部变量的一种方法。

  1. // 2. 对象解构
  2. // 等号左边是右边的模板,必须长得一样
  3. let item = { id: 10, name: "手机" };
  4. let id = item.id;
  5. let name = item.name;
  6. console.log("id = %d, name = %s", id, name);
  7. // {id,name} = { id: 10, name: "手机" }
  8. ({ id, name } = { id: 40, name: "电脑" });
  9. console.log("id = %d, name = %s", id, name);

3、传参解构:

  1. // 数组传参
  2. let sum = ([a, b]) => a + b;
  3. console.log(sum([30, 50]));
  4. // 对象传参
  5. let getUser = ({ name, email }) => [name, email];
  6. console.log(getUser({ name: "小马", email: "admin@qq.com" }));

四、访问器属性

访问器属性不包含数据值,包含一对get和set方法,在读写访问器属性时,就是通过这两个方法来进行操作处理的。

  1. // 对象成员: 属性, 方法
  2. // 属性: 类似于变量
  3. // 方法: 类似于函数
  4. const product = {
  5. // 属性
  6. data: [
  7. { id: 1, name: "电脑", price: 5000, num: 5 },
  8. { id: 2, name: "手机", price: 4000, num: 15 },
  9. { id: 3, name: "相机", price: 1400, num: 10 },
  10. ],
  11. // 计算总金额
  12. // 方法
  13. // es6的方法的简化,将冒号和function可以删除
  14. getAmounts() {
  15. return this.data.reduce((t, c) => (t += c.price * c.num), 0);
  16. },
  17. // 访问器属性: 将一个方法伪装/包装成一个属性
  18. // get: 是读取,也叫读操作
  19. get total() {
  20. return this.data.reduce((t, c) => (t += c.price * c.num), 0);
  21. },
  22. // set: 访问器属性的写操作
  23. set setPrice(price) {
  24. this.data[1].price = price;
  25. },
  26. };
  27. console.log("总金额 = %d 元 ", product.getAmounts());
  28. // 不想用方法,想以属性的方式来获取总金额
  29. console.log("总金额 = %d 元 ", product.total);
  30. console.log(product.data[1].price);
  31. product.setPrice = 8000;
  32. console.log(product.data[1].price);

更多相关文章

  1. 210401 JavaScript 值传递与引用传递, 模板字面量, 标签函数, 解
  2. 数组,对象,传参解构; 访问器属性的get,set操作
  3. 技术干货 | 深度解构 Android 应用面临紧急发版时的救星方案:mPaa
  4. JavaScript中的数组,对象,传参解构,访问器属性
  5. js 中的数组,对象,传参解构;访问器属性get,set操作 ---- 0401
  6. JS中的数组,对象,传参,对象中的只读,只写属性
  7. js之数组对象与访问器
  8. 【JS基础入门】JavaScript基础之值与引用传递、模板字面量、解构
  9. 实例ES6演示数组,对象,传参解构; 实例演示访问器属性的get,set操作

随机推荐

  1. 如何更改Gmaps.js在Google地图中使用的图
  2. jQuery UI框架的Dreamweaver接口
  3. jQuery UI AutoComplete的使用
  4. 在使用kendo网格中的删除按钮后,如何刷新M
  5. jQuery自动完成不适用于多个文本输入
  6. 注册的时候,点击注册按钮,用jquery怎么直接
  7. Send JSON object to Struts 2 action by
  8. jquery 插件bgStretcher 切换背景图片
  9. jquery select(每个)所有选中的复选框?
  10. jquery ajax基本用法