Javascript数据分为两大类:1.基础类型(原始类型数据) 2.引用类型。他们的存储方式是不同的

基础类型的数据存储是保存在栈内存中的:

例如: var a=1; var b=a;

 var a=1;
var b=a;
a=2;
alert(b);//

上面的代码首先给变量a赋值1,存在栈内存中如上图,然后声明了变量b,并且把变量a的值复制一份给变量b,在栈内存中分别保存了变量a,b的值都为1,然后改变了变量a的值为2,但是他们都是独立存在于栈内存中的,所以不会受到影响,最后弹出b的值为1.

引用类型的数据存储方式:

例如:var a=new Object();a.name=“yewenxiang”;

 var a=new Object();
a.name=“yewenxiang”;
var b=a;
a.name=“xiangwang”;
alert(b.name);//xiangwang

引用类型中对象的存储方式和基础数据类型存储方式是不同的,对象是存在堆内存中的,而栈内存中存储的是变量名和指向堆内存中对象的地址。

第一行:申明了变量a 创建了一个对象实例保存在堆内存中,

第二行:给a对象添加了一个name属性,值为”yewenxiang”,保存在了堆内存中,

第三行:申明了一个变量b,在栈内存中把a 指向对象的地址复制给了变量b,两个地址指向的是相同的一个对象。

第四行:改变对象中name的属性值为”xiangwang”

第五行:为什么弹出的是”xiangwang”呢,因为他们指向的是同一个对象,而上行代码把name的属性值变为了”xiangwang”,所以b.name的值也是“xiangwang”.

碰到的难点:

 var a={name:”yewenxiang”};
var b=a;
a={name:”xiangwang”};
alert(b.name);//“yewenxiang”

为什么会弹出yewenxiang,这个问题我刚开始的思路想错了:开始以为他们都是指向同一个对象,改变了a.name的值为”xiangwang”,所以b.name的值也会改变为”xiangwang”。问题出现在第三行代码,a={name:xiangwang},这行代码不是在第一行那个对象中改变了name属性的值为“xiangwang”,而是又重新创建了另外一个对象,而且里面也有了一个name属性,值为”xiangwang”,如果不想创建一个新对象应该这么去写第三行代码a.name=“xiangwang”,最后弹出的值才是”xiangwang”。

整理Javascript基础数据和引用数据复制值的问题的更多相关文章

  1. Javascript基础学习(1)_类型、值和变量

    1.null和undefined ①概念上区别: null是一个特殊的对象,是“非对象”,使用typeof后是object对象 undefined用未定义的值表示更深层次的“空值”,它是变量的一种取值 ...

  2. JavaScript基础回顾一(类型、值和变量)

    请看代码并思考输出结果 var scope = 'global'; function f(){ console.log(scope); var scope = 'local'; console.log ...

  3. javascript基础知识3#引用类

    引用类 引用类型的只是引用类型的一个实例,在ecmascript当中,引用类型是一种数据结构用于将数据和功能组织在一起,也常被称做类. object类型 构造函数[var o = new object ...

  4. JavaScript | 基础(变量/引用/转换/函数)

    ———————————————————————————————————————————— 变量 全局变量:在函数体外声明,全局可以使用 局部变量:通过关键字var来声明 变量类型 <script ...

  5. 前端面试题整理——Javascript基础

    常见值类型: let a; //undefined let s = 'abc'; let n = 100; let b = true; let sb = Symbol('s'); let nn = N ...

  6. 整理javascript基础

    原始类型值(Primitive values) 下面的全是原始类型值(简称:原始值): 布尔类型:true,false 数字类型:1736,1.351 字符串类型: 'abc',"abc&q ...

  7. 【Javascript 基础】比较 undefined 和 null 值

    JavaScript 中有两个特数值: undefined和null,在比较它们的时候需要留心.在读取未赋值的变量或试图读取对象没有的属性时得到的就是 undefined 值. <!DOCTYP ...

  8. 基本类型和引用类型的值 [重温JavaScript基础(一)]

    前言: JavaScript 的变量与其他语言的变量有很大区别.JavaScript 变量松散类型的本质,决定了它只是在特定时间用于保存特定值的一个名字而已.由于不存在定义某个变量必须要保存何种数据类 ...

  9. JavaScript基础教程复习笔记

    document.write("<h1>这是一个标题</h1>"); 您只能在 HTML 输出中使用 document.write.如果您在文档加载后使用该 ...

随机推荐

  1. 无线密码破解----minidwep-gtk的PIN破解方法

    使用虚拟机对minidwep-gtk进行PIN破解  用CDLINUX支持8187和3070_30211版.iso系统PJpin码 1.用虚拟机的好处是方便,可以一边破解,一边上网做其他事情. 虚拟机 ...

  2. C语言使用pthread多线程编程(windows系统)二

    我们进行多线程编程,可以有多种选择,可以使用WindowsAPI,如果你在使用GTK,也可以使用GTK实现了的线程库,如果你想让你的程序有更多的移植性你最好是选择POSIX中的Pthread函数库,我 ...

  3. winodws同步时间命令

    首先,你应该判断你的两台域控制器,哪一台担任PDC角色(默认的域内权威的时间服务源). 判断方法很简单,单击“开始”,单击“运行”,键入dsa.msc,然后点确定.这时会打开“Active Direc ...

  4. django创建第一个项目helloworld

    环境:centos 7,已安装python 3.6环境 1.安装django并创建django第一个项目 1.1.使用pip安装django# pip install Django或指定安装版本# p ...

  5. Phonegap 开发环境搭建

    以Android为例介绍Phonegap开发环境搭建 一. 软件下载 1. JDK 8 下载 http://www.oracle.com/technetwork/java/javase/downloa ...

  6. 黄聪:js 获取浏览器、Body、滚动条、可见区域、页面、边框、窗口高度和宽度值(多浏览器)

    IE中:document.body.clientWidth ==> BODY对象宽度document.body.clientHeight ==> BODY对象高度document.docu ...

  7. ThinkJava-压缩

    尽管存在许多种压缩算恙,但是Zip和GZIP可能是最常用的.因此我们可以很容易地使用多 种可读写这些格式的工具来操纵我们的压缩数据.   1 用GZIP进行简单压缩 GZIP接口非常简单, 因此如果我 ...

  8. Oracle DSI系列 01 DSI初识BBED

    DSI是Data Server Internals的缩写,是Oracle公司内部用来培训Oracle售后工程师使用的教材. 1 bbed工具使用BBED工具介绍BBED stands for Bloc ...

  9. Web API 源码剖析之默认消息处理程序链--》路由分发器(HttpRoutingDispatcher)

    我们在上一节讲述了默认的DefaultServer(是一个类型为HttpServer的只读属性,详情请参考 Web API 源码剖析之全局配置).本节将讲述DefaultHandler(是一个Http ...

  10. window server2008 r2 限制远程访问用户数量

    在服务器端设置 修改组策略 1,开始-运行-gpedit.msc-计算机配置-管理模板-Windows组件-远程桌面服务-远程桌面会话主机-限制连接数量-开启并改为1