• Object.assign
    Object.assign可以用于js对象浅复制。语法:Object.assign(target, source1, source2);
    第一个参数为目标对象,后面的为要合并的对象(源对象)。
    例:
let obj={a:2,
b:4
}
Object.assign({}, obj, {c:6}); // 将{c:6}与obj合并  返回{a:2,b:4,c:6}

当属性名相同时,新增的会覆盖原来的属性

let obj={a:2,
b:4
}
Object.assign({}, obj, {b:6}); //  返回{a:2,b:6}

Object.assign只会拷贝对象本身的属性,不拷贝继承属性,不拷贝不可枚举对象。

Object.assign可以用来处理数组,但是会把数组视为对象。

Object.assign([1, 2, 3], [4, 5])   // [4, 5, 3]

上面代码中,Object.assign把数组视为属性名为 0 、 1 、 2 的对象,源数组的 0 下标属性4覆盖了目标数组的 0 下标属性1。

  • vue视图刷新
    vue不能检测对象属性的添加和删除(已创建的实例上动态添加和修改根级响应式属性),在官方文档中推荐使用vm.set方法
this.$set(this.someObject,'b',2)    //Vue.set(vm.someObject, 'b', 2)

例:

let app = new Vue({    //已经创建的实例
el: '#app',
data () {return {name: 'zhangsan'             //    根级响应属性} }}) app.age = 'lisi'                    // 这个age不响应

这时就可以使用vm.set:

this.$set(this.data, 'age', 'lisi')

也可以使用Object.assign() 或 _.extend()来添加新的属性,但是要创建一个新的对象。

this.data = Object.assign({}, this.data, { age:'lisi' })  //这里{} 就是创建的新的对象

Vue不能检测到通过索引和改变长度修改值的数组
例:

data () {return {newA: [5, 6, 7, 8, 9]}......
this.newA[4] = 4     //不能检测到更新
this.newA.length =  5     //不能检测到更新

这时可以使用vm.set:

this.$set(this.newA, 4, 8888888)

使用object.assign:

this.newA = Object.assign([], this.newA, this.newA[4] = 9999)

使用splice:

this.newA.splice(4, 1, 99999)     //参数分别为:1.要删除/添加的下标,2.要删除的项数,0为不删除,3.要添加的值

在需要改变整个数组的值的时候,使用Object.assign和$set并不能有很好的体验效果(新增的是键值),所以可以使用push、filter、等方法改变原数组值

关注公众号bug人生回复“资料”可获得vue\nodejs一系列视频教程

参考文章Vue 2.0的学习笔记: Vue中的响应式
深入响应式原理
ES6对象方法Object.assign()

Object.assign与vue $set相关推荐

  1. 【一语点醒梦中人】如何优雅地合并两个JSON对象 → Object.assign(a, b)和Object.assign({}, a, b)的区别

    var a = {a: 1}; var b = {b: 2}; var c = Object.assign(a, b);/* a对象也会改变,b不变,返回被被修改对象 */ var d = Objec ...

  2. JavaScript 复制对象与Object.assign方法无法实现深复制

    在JavaScript这门语言中,数据类型分为两大类:基本数据类型和复杂数据类型.基本数据类型包括Number.Boolean.String.Null.String.Symbol(ES6 新增),而复 ...

  3. Object​.assign()

    定义: 用于将所有可枚举属性的值从一个或多个源对象复制到目标对象,它将返回目标对象. 语法: object.assign(target,. . .sources); target: 目标对象. sou ...

  4. assign深拷贝_经典前端面试题: Object.assign 是浅拷贝还是深拷贝?实现深拷贝的方法有哪些?...

    Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象.它将返回目标对象. 如果目标对象中的属性具有相同的键,则属性将被源对象中的属性覆盖.后面的源对象的属性将类 ...

  5. 原生js实现Object.assign和Object.create

    Object.assign(target,-sources) Object.assign(target,-source)方法用于将所有可枚举的属性的值从一个或多个源对象复制到目标对象.它将返回目标对象 ...

  6. ecma 2018, javascript spread syntax behaves like Object.assign

    as the subject. It is only supported in Chrome version 60+, so, first check the version, or just use ...

  7. 扩展运算符,Object.assign

    2019独角兽企业重金招聘Python工程师标准>>> assign或者...扩展符 都是浅拷贝 对象中的扩展运算符(...)用于取出参数对象中的所有可遍历属性,拷贝到当前对象之中 ...

  8. JavaScript深入理解对象方法——Object.assign()

    Object.assign() Object.assign()方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象.它将返回目标对象. 语法 Object.assign(target, ... ...

  9. Object.create()和Object.assign()

    一.Object.create() 该方法用于创建一个新对象,并为其指定原型对象和属性. 语法:Object.create(prototype,description); proto:(必须),表示新 ...

最新文章

  1. C/C++笔记(04):GB2312字符串和UTF-8之间的转换
  2. unity底层运行机制_Unity跨平台的机制原理
  3. S2-MLPV2:目前最强的视觉MLP架构,空降榜一,达到83.6% Top-1准确率
  4. 我与Python | 从Hacker到探索Deep Learning
  5. Dart云平台-DartPad
  6. optional 解决空指针_Java8新特性:Optional类的正确使用姿势
  7. 中国移动云能力中心 高薪诚聘各路运维技术专家
  8. python关于pyaudio无法import的一系列问题
  9. 【牛客网-公司真题-前端入门篇】——百度2021校招Web前端研发工程师笔试卷(第二批)
  10. 基于51单片机的电子时钟(数码管显示)
  11. 主攻文推荐攻守都有系统_坚守最后一道防线
  12. Linux---挂载和卸载移动硬盘、开机自启动机械硬盘
  13. ElasticSearch ingest-geoip插件
  14. C语言编程>第十六周 ⑧ S是一个由数字和字母字符串组成的字符串,由变量len传入字符串长度。请补充fun函数,该函数的功能是把字符串s中的数字字符转换成数字并存放到整型数组a中
  15. QUANT[1]:从零开始量化交易
  16. UCOSIII任务管理
  17. 一个逗比 程序员 web前端的理想!
  18. 某手app的__NS_sig3,sig,__NStokensig算法
  19. 多尺度特征表示在深度学习中的重要意义
  20. 压力测试软件怎么补救,压力测试软件

热门文章

  1. 12 More Effective C++—条款16/17 (2/8原理与延缓求值)
  2. 关于互联网公司,说几句个人感触
  3. Docker学习笔记(2)--Docker常用命令
  4. 最新精仿乐乐易支付网站模板源码
  5. 新月已冉冉升起.ALOKEX永续合约统领市场已成定局
  6. 零基础入门推荐系统 - 新闻推荐实战-笔记四
  7. CUDA中的NVCC编译器详解
  8. selenium源码通读·4 |webdriver/common分析
  9. 手机中PDF格式转换PPT操作方法
  10. Microsoft Visual Studio 2003 2005 2008 2010 2012 下载