什么是扩展运算符?使用场景

扩展运算符(Spread Operator)是ES6中引入的一个新语法,用三个点(...)表示。它可以在函数调用、数组和对象的字面量等场景中,将一个可迭代对象(如数组、字符串或对象)展开成单个元素序列。

使用场景例子:

  1. 数组拷贝和合并:

    const arr1 = [1, 2, 3];
    const arr2 = [...arr1]; // 拷贝数组
    const arr3 = [...arr1, 4, 5]; // 合并数组

    函数调用传参:

    function foo(a, b, c) {
      console.log(a + b + c);
    }
     
    const args = [1, 2, 3];
    foo(...args); // 传入数组作为参数

    对象字面量中的属性拷贝:

    const obj1 = { a: 1, b: 2 };
    const obj2 = { ...obj1 }; // 拷贝对象
    const obj3 = { ...obj1, c: 3 }; // 合并属性

    原理: 扩展运算符背后的原理是利用可迭代对象的iterator接口(Symbol.iterator属性),通过遍历获取可迭代对象的每个元素。对于数组,扩展运算符会依次取出元素进行展开;对于字符串,会将字符串转换成字符数组再进行展开;对于对象,会先获取其可遍历属性的键,然后依次取出键对应的值进行展开。最终生成一个新的数组或对象。
     

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
工厂系列模式的优缺点: 让用户的代码和某个特定类的子类的代码解耦 用户不必知道它所使用的对象是怎样创建的,只需知道该对象有哪些方法 抽象工厂模式可以为用户创建一系列相关的对象,使用户和创建这些对象的类脱耦 MVC模式是不是一种设计模式?为什么 MVC不是设计模式,应该是框架/架构模式,因为它的定义是抽象的,没有足够的细节描 述使你直接去实现,而只能根据MVC的概念和思想,用几个设计模式组合实现。 举出一个生活中使用装饰者模式的例子,用程序实现思路 举个生活中的例子,俗话说"人在衣着马在鞍",把这就话用装饰者模式的语境翻译一下 ,"人通过漂亮的衣服装饰后,男人变帅了,女人变漂亮了;"。对应 上面的类图,这里人对应于ConcreteComponent,而漂亮衣服则对应于ConcreteDecorato r; 设计模式如何分类,每一个类别都有什么特征? 设计模式分为3类,分别是:创建型模式、行为型模式、结构型模式。 创建型特点:避免用户直接使用new运算符创建对象。 行为型特点:怎样合理的设计对象之间的交互通信,以及怎样合理的为对象分配职 结构型特点:主要用于处理类或对象的组合 Java jdk中使用了哪些设计模式 1.单例2.静态工厂3.工厂方法4.抽象工厂5.构造者6.原型7.适配器8桥接9.组合10.装 饰器11.外观12.享元14.代理15.迭代器16.观察者17.协调者18.模板方法19.策略20.责 任链21.命令22.空对象25.解释器 面向对象的设计原则有哪些? 开闭原则、面向抽象的原则(依赖倒转原则)、多用组合少用继承原则、高内聚- 低耦合原则。 观察者模式的推拉有什么不同?使用场景 推,具体主题将变化后的数据全部交给具体观察者。场景:当具体主题认为具体观察者 需要这些变换后的数据时,往往采用推数据方式; 拉,具体主题不将变化后的数据交给具体观察者,而是提供获得这些数据的方法。场景 :当具体主题不知道具体观察者是否需要这些变换后的数据时,往往采用拉数据的方式 。 策略模式和工厂模式有什么不同? 策略模式定义了一系列算法,将他们一个个封装,并且他们之间可以相互替换; 工厂模式定义一个创建对象的接口,让子类决定实例化哪一个类 5观察者模式的推拉有什么不同?适用场景 现在要说的分歧在这里: "推"的方式是指,Subject维护一份观察者的列表,每当有更新发生,Subject会把更新 消息主动推送到各个Observer去。 "拉"的方式是指,各个Observer维护各自所关心的Subject列表,自行决定在合适的时间 去Subject获取相应的更新数据。 "推"的好处包括: 1、高效。如果没有更新发生,不会有任何更新消息推送的动作,即每次消息推送都发生 在确确实实的更新事件之后,都是有意义的。 2、实时。事件发生后的第一时间即可触发通知操作。 3、可以由Subject确立通知的时间,可以避开一些繁忙时间。 4、可以表达出不同事件发生的先后顺序。 缺点:精确性较差,不能保证能把信息送到客户器。 "拉"的好处包括: 1、如果观察者众多,Subject来维护订阅者的列表,可能困难,或者臃肿,把订阅关系 解脱到Observer去完成。 2、Observer可以不理会它不关心的变更事件,只需要去获取自己感兴趣的事件即可。 3、Observer可以自行决定获取更新事件的时间。 4、拉的形式可以让Subject更好地控制各个Observer每次查询更新的访问权限。缺点: 不能够及时获取系统的变更。 6策略模式和工厂模式有什么不同? 一般情况下,策略模式是为了解决的是策略的切换与扩展,更简洁的说是定义策略族, 分别封装起来,让他们之间可以相互替换,策略模式让策略的变化独立于使用策略的客 户。可以应用的场景有优惠系统、工资计算系统等。而工厂模式主要解决的是资源的统 一分发,将对象的创建完全独立出来,让对象的创建和具体的使用客户无关。主要应用 在多数据库选择,类库文件加载等。很明显的是策略模式是开放的,作为一个主体你的 活动范围是全程的,大多数事情要你自己亲力亲为。而工厂模式作是封闭的,作为主体 的你的活动范围是有限的,很多事情都帮组你做好了,你直接"点"就可以了。 7装饰者模式和适配器模式的比较 1.关于新职责:适配器也可以在转换时增加新的职责,但主要目的不在此。装饰者模 式主要是给被装饰者增加新职责的。 2.关于原接口:适配器模式是用新接口来调用原接口,原接口对新系统是不可见或者 说不可用的。装饰者模式原封不动的使用原接口,系统对装饰的对象也通过原接口来完 成使用。(增加新接口的装饰者模式可以认为是其变种--"半透明"装饰者) 3.关于其包裹的对象:适配器是知道被适配者的详细情况的(就是那个类或那个接口 )。装饰者只知道其接口是什么,至于

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值