window.cc = 1
window.cc = !window.cc
console.log(window.cc)
data[0].show = window.cc
console.log(data)
上面的代码运行的时候window.cc的值是一直在变化的,可将window.cc中的值给data(一个对象)console.log(data中被赋值的部分是不会变化的为什么),我知道js有引用,可是想不通这个不管是赋值还是引用都改变了data里面的值了,可是为什么log打印出来的还是不能发生变化
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
楼主你没有给出你的所有代码和控制台信息,所以我只是猜你可能对console.log的理解和我之前的一样,直接用代码说话
chrome控制台截图:

接下来再废话一下console.log,console.log能提供非常详细的对象的信息,这是它无与伦比的优势,但是你要知道,console.log不会阻塞程序的运行,它所打印出来的对象不是即时的,不是即时的,不是即时的。重要的事情说三便。不过呢,console.log打印出来的第一行(也就是没有展开显示时的数据)是即时的,是调用console.log的一瞬间的数据状态,但是展开后的部分不是。所以你可以在我的例子中看到两次console.log显示了a:2,而事实上,第一次调用console.log是,x.a===1。
通常对于console.log我会多留心一下,他可能让你认为你的某些函数天生具备异步特性(虽然他们并没有),在你对console.log打印出来的数据产生怀疑时,应该再测试一些,通常可以用alert或者congsole.log(一个非应用类型),在我的例子中,我很可能就会在console.log(x.a)看一下x.a的变化
JavaScript 中有两种不同的数据类型值,如下:
一类是基本类型值:就是简单的数据值,像布尔值、数字、字符串,还有 NULL / Undefined。这些是按值访问,也就是说,如果你把这样的值赋给其它的,是相当于复制一个新的值
一类是引用类型值。复杂的对象,都是引用类型值。赋值的时候,相当于是赋的引用地址。
你这里,
window.cc先是一个数字,后来是一个布尔值,都是简单类型,所以赋值给data[0].show的时候,是直接复制值,不是传递引用对象。如果你用下面的代码:
就会发现,修改
window.cc.name,data[0].show的值同样会变化。