首先
这里讲讲,我为什么会遇到这个坑,在遇到这个坑之前,我在学习vue3,看一个大佬封装的框架也需要过,那时我还以为是ts的某些知识。问了些人,也没搞懂就放在不管了,这次在自己项目vue2的js也遇到了。 console.log()会展示引用数据类型会呈现最终内存地址的值,没有按照同步走。
代码
let a = [
{
b: [
{c: 1}
]
},
{
b: [
{c: 2}
]
},
{
b: [
{c: 3}
]
}
]
console.log(a);
a.map(item => {
item.b = Object.assign([], [{c: 4}]);
})
console.log(a);
这里需要放在浏览器中执行,会看待第一个 console.log()和第二打印的值是相同的,下面的c都是为4。
第一个误区
var obj = {};
console.log(obj);
obj.foo = 'bar';
这里我们会以为console.log()会按照同步来执行。在node环境中是这样的。但是在chrome中不是。
这是结果。console.log()还是会展示出最终内存上面的值。
在webkit的console.log()只是存了,该引用数据类型的内存地址。当代码执行完了才去拿值。所以会展示出后面的值。
第二个误区
这个是有误解的,当数组是一个原始值的时候,是不能够改变,但是当数组是引用数据类型还是能够改变的。就像前面的对象 改变了下面属性的值。
最后
祝大家都有光明的未来,啊哈哈!!!!