【 ES6 】解构

数组解构

  • 解构数组
    const names = ["Henry", "Bucky", "Emily"];
    // 解构
    const [name1, name2, name3] = names;
    console.log(name1, name2, name3);
    // Henry Bucky Emily
    
  • 返回数组个数 使用 { }
    const { length } = names;
    console.log(length); // 3
    
  • 结合展开运算符
    const [name, ...rest] = names;
    console.log(name); // Henry
    console.log(rest); // [ 'Bucky', 'Emily' ]
    
  • 对象数组
    const people = [
      { name: "Henry", age: 20 },
      { name: "Bucky", age: 25 },
      { name: "Emily", age: 30 }
    ];
    
    // es5 
    var age = people[0].age;
    console.log(age);
    
    // es6 解构
    // 获得people里面的每一个对象 {},{},{}
    const [person] = people;
    console.log(person); // { name: 'Henry', age: 20 }
    
    // 解构单个对象 并且获得对象的年纪
    const { age } = person;
    console.log(age);// 20
    
  • 将数组转化为对象
    const points = [
      [4, 5],
      [10, 1],
      [0, 40]
    ];
    
    // 期望数据格式
    // [
    //   {x:4,y:5},
    //   {x:10,y:1},
    //   {x:0,y:40}
    // ]
    
    let newPoints = points.map(pair => {
      // const x = pair[0];
      // const y = pair[1];
      const [x, y] = pair;
      return { x, y }
    })
    
    // ES6解构 将上面的pair直接解构
    let newPoints = points.map(([x, y]) => {
      return { x, y }
    })
    
    console.log(newPoints); 
    // [ { x: 4, y: 5 }, { x: 10, y: 1 }, { x: 0, y: 40 } ]
    

对象解构

var expense = {
  type: "es6",
  amount: "45"
};

// 非ES6
var type = expense.type;
var amount = expense.amount;
console.log(type, amount); // es6 45

// ES6解构 解构对象的所有内容 不能改变{ xxx }里面的名字 必须和对象的属性保持一致
const { type, amount } = expense;
console.log(type, amount); // es6 45
var saveFiled = {
  extension: "jpg",
  name: "girl",
  size: 14040
};
// ES5
function fileSammary(file){
  return `${file.name}.${file.extension}的总大小是${file.size}`;
}

// ES6 解构
function fileSammary({ name, extension, size }) {
  return `${name}.${extension}的总大小是${size}`;
}

console.log(fileSammary(saveFiled));
// girl.jpg的总大小是14040
内容概要:本文详细介绍了“秒杀商城”微服务架构的设计与实战全过程,涵盖系统从需求分析、服务拆分、技术选型到核心功能开发、分布式事务处理、容器化部署及监控链路追踪的完整流程。重点解决了高并发场景下的超卖问题,采用Redis预减库存、消息队列削峰、数据库乐观锁等手段保障数据一致性,并通过Nacos实现服务注册发现与配置管理,利用Seata处理跨服务分布式事务,结合RabbitMQ实现异步下单,提升系统吞吐能力。同时,项目支持Docker Compose快速部署和Kubernetes生产级编排,集成Sleuth+Zipkin链路追踪与Prometheus+Grafana监控体系,构建可观测性强的微服务系统。; 适合人群:具备Java基础和Spring Boot开发经验,熟悉微服务基本概念的中高级研发人员,尤其是希望深入理解高并发系统设计、分布式事务、服务治理等核心技术的开发者;适合工作2-5年、有志于转型微服务或提升架构能力的工程师; 使用场景及目标:①学习如何基于Spring Cloud Alibaba构建完整的微服务项目;②掌握秒杀场景下高并发、超卖控制、异步化、削峰填谷等关键技术方案;③实践分布式事务(Seata)、服务熔断降级、链路追踪、统一配置中心等企业级中间件的应用;④完成从本地开发到容器化部署的全流程落地; 阅读建议:建议按照文档提供的七个阶段循序渐进地动手实践,重点关注秒杀流程设计、服务间通信机制、分布式事务实现和系统性能优化部分,结合代码调试与监控工具深入理解各组件协作原理,真正掌握高并发微服务系统的构建能力。
### ES6 解构赋值中默认值的用法 在ES6中,解构赋值允许为变量设置默认值。当目标对象中的属性值严格等于`undefined`时,会触发默认值的使用[^3]。这意味着如果属性值存在且不为`undefined`,即使它是`null`或其他假值(如`false`或`0`),默认值也不会生效[^4]。 以下是一个简单的示例展示如何在对象解构赋值中设置默认值: ```javascript const user = { userName: "光脚丫思考", blog: "https://blog.youkuaiyun.com/gjysk" }; const { userName = "匿名用户", blog = "无博客", status = "offline" } = user; console.log(userName); // "光脚丫思考" console.log(blog); // "https://blog.youkuaiyun.com/gjysk" console.log(status); // "offline" ``` 在这个例子中,`userName`和`blog`在`user`对象中已经定义,因此它们不会使用默认值。而`status`在`user`对象中未定义,所以它会采用默认值`"offline"`[^3]。 对于数组解构赋值,同样可以设置默认值。例如: ```javascript const [x = 10, y = 20] = [5]; console.log(x, y); // 5, 20 ``` 这里,`x`被赋予了数组中的值`5`,而`y`由于数组中没有提供第二个值,所以采用了默认值`20`[^4]。 ### 默认值表达式的惰性求值 需要注意的是,默认值表达式是惰性求值的,即只有在需要时才会计算默认值。例如: ```javascript function getValue() { console.log("getValue 被调用了"); return "default"; } const { name = getValue() } = {}; console.log(name); // "default" ``` 在这个例子中,`name`在对象中未定义,因此调用了`getValue()`函数来获取默认值。 ### 默认值与严格相等 默认值仅在属性值严格等于`undefined`时生效。如果属性值为`null`、`false`或`0`,默认值不会被使用。例如: ```javascript const { a = 10, b = 20 } = { a: null, b: undefined }; console.log(a, b); // null, 20 ``` 在这里,`a`的值为`null`,因此默认值`10`不生效;而`b`的值为`undefined`,所以默认值`20`生效。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值