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打印出来的还是不能发生变化
'use strict';
window.cc = {
isClick: false
};
var data = [{
show: null
}];
data[0].show = window.cc;
// before cc change, data[0].show: Object {isClick: false}
console.log('before cc change, data[0].show: ', data[0].show);
window.cc.isClick = !window.cc.isClick;
// before cc change, data[0].show: Object {isClick: true}
console.log('after cc change, data[0].show: ', data[0].show);
window.cc.isClick = !window.cc.isClick;
// before cc change, data[0].show: Object {isClick: false}
console.log('after cc change, data[0].show: ', data[0].show);
window.cc.isClick = !window.cc.isClick;
// before cc change, data[0].show: Object {isClick: true}
console.log('after cc change, data[0].show: ', data[0].show);
JavaScript 中有两种不同的数据类型值,如下:
一类是基本类型值:就是简单的数据值,像布尔值、数字、字符串,还有 NULL / Undefined。这些是按值访问,也就是说,如果你把这样的值赋给其它的,是相当于复制一个新的值
一类是引用类型值。复杂的对象,都是引用类型值。赋值的时候,相当于是赋的引用地址。
你这里,window.cc
先是一个数字,后来是一个布尔值,都是简单类型,所以赋值给 data[0].show
的时候,是直接复制值,不是传递引用对象。
如果你用下面的代码:
var data = [];
window.cc = {name: 'Sid'};
data[0] = {};
data[0].show = window.cc;
window.cc.name = 'Zoe';
console.log('data[0].show:', data[0].show, ', window.cc:', window.cc);
就会发现,修改 window.cc.name
,data[0].show
的值同样会变化。
楼主你没有给出你的所有代码和控制台信息,所以我只是猜你可能对console.log的理解和我之前的一样,直接用代码说话
var x = {a:1,b:[1,2,3,4,5,6,7]};
//b只是为了chrome控制台中能出现展开对象的按钮,如果没有的话,你可以再添加点属性让它出现展开按钮
//毕竟平时工作时查看的大部分对象都是展开后才能看全的
console.log(x);
x.a=2;
console.log(x);
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的变化