javascript为什么不能这样赋值?
巴扎黑
巴扎黑 2017-04-10 15:44:02
[JavaScript讨论组]

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打印出来的还是不能发生变化

巴扎黑
巴扎黑

全部回复(2)
阿神
    '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);
PHPz

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.namedata[0].show 的值同样会变化。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号