关于深拷贝的问题,以及为什么vue的数据要return出来
众所周知,vue的存储数据要return出来 ,其实vue官方有详细的解释。API — Vue.js 附上链接大家可以自行查看。
之前遇到的问题就是深拷贝的问题,
先展示一下当时的解决办法:
Vue.prototype.cloneObj = function(obj) {
let _this = this;
let str, newobj = obj.constructor === Array ? [] : {};
if (typeof obj !== 'object') {
return;
} else if (window.JSON) {
str = JSON.stringify(obj);
newobj = JSON.parse(str);
} else {
for (var i in obj) {
newobj[i] = typeof obj[i] === 'object' ? _this.cloneObj(obj[i]) : obj[i];
}
}
return newobj;
};
直接将此方法,放在全局引入即可,但是 为什么会有这个问题呢,牵扯到 js 的数据类型 有 两种 就是简单数据类型和复杂数据类型也就是基本数据类型和引用数据类型
基本数据类型:Undefined、Null、Boolean、Number
引用数据类型:Object、Array和Function
![](https://img.haomeiwen.com/i9179237/f37568e44e589049.png)
其实string有些特殊 后面再讲
大概就上上图 我表达的意思 如果直接赋值的话 就会改变 堆里面村的数据 也就是改变了原始的数据 但是return出来的话 就是把他拿出来改变特德值。后面有空的话 会详细的补充一下这些知识。
![](https://img.haomeiwen.com/i9179237/df437037fffc1f1d.png)