整理Javascript基础数据和引用数据复制值的问题

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Helvetica; color: #000000 }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Helvetica; color: #000000 }
span.s1 { }

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

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

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

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

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Helvetica; color: #000000 }
span.s1 { }

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

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Helvetica; color: #000000 }
span.s1 { }

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

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Helvetica; color: #000000 }
span.s1 { }

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

1 var a=new Object();
2       a.name=“yewenxiang”;
3 var b=a;
4       a.name=“xiangwang”;
5 alert(b.name);//xiangwang

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Helvetica; color: #000000 }
span.s1 { }

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

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

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

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

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

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

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Helvetica; color: #000000 }
span.s1 { }

碰到的难点:

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

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Helvetica; color: #000000 }
span.s1 { }

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

时间: 2024-08-01 10:43:32

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

整理javascript基础

原始类型值(Primitive values) 下面的全是原始类型值(简称:原始值): 布尔类型:true,false 数字类型:1736,1.351 字符串类型: 'abc',"abc" 两个"无值(non-values)":undefined,null 对象(Objects) 所有非原始值(non-primitive)的值都是对象.最常见的几种对象类型是: 简单对象(类型是Object)能通过对象字面量创建: { firstName: 'Jane', lastN

JavaScript基础 Date(num) num为毫秒值 创建一个时间对象

镇场诗: 清心感悟智慧语,不着世间名与利.学水处下纳百川,舍尽贡高我慢意. 学有小成返哺根,愿铸一良心博客.诚心于此写经验,愿见文者得启发.------------------------------------------ code: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=ut

【Javascript 基础】比较 undefined 和 null 值

JavaScript 中有两个特数值: undefined和null,在比较它们的时候需要留心.在读取未赋值的变量或试图读取对象没有的属性时得到的就是 undefined 值. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Learn4UndefinedAndNull</title> </head

整理JavaScript高级基础知识

整理JavaScript高级基础知识 因为空余时间很多..所以博客更新频率得相对频繁些.. 原型以及原型链 考察原型以及原型链: var object = {} object.__proto__ === Object.prototype // 为 true var fn = function(){} fn.__proto__ === Function.prototype // 为 true fn.__proto__.__proto__ === Object.prototype // 为 true

javascript 基础学习整理 二 之 html对象总结,参考W3C

Anchor 对象 更改一个链接的文本.URL 以及 target 使用 focus() 和 blur() 向超链接添加快捷键 Document 对象 使用 document.write() 向输出流写文本 使用 document.write() 向输出流写 HTML 返回当前文档的标题 返回当前文档的 URL 返回当前文档的 referrer 返回下载当前文档的服务器域名 使用 getElementById() 使用 getElementsByName() 打开一个新的文档,添加一些文本,然后

JavaScript基础知识整理

1.在 JScript 中 null 和 undefined 的主要区别是 null 的操作象数字 0,而 undefined 的操作象特殊值NaN (不是一个数字).对 null 值和 undefined 值作比较总是相等的.null和undefined拼接string字符时相当于'null'和'undefined'字符串拼接. 如: null+2=2; null*4=0; undefined+2=NaN; null==undefined //返回true. null+'qqqq'=nullq

JavaScript语法细节——引用与复制

原文:JavaScript语法细节--引用与复制 我们都知道,JS中变量的赋值有两种方式,最近在折腾自己写的标签栏插件,碰到了很多平时没注意的问题.正好,那边处理清楚了,稍微整理一下关于引用与复制相关知识,可能会不定期增加新碰到的问题,有错误希望看到的人指出,避免传播不正确的知识. 先大致分一下类,引用类型:Object以及其旗下的Array,Date,RegExp,Function:基本包装类型:Boolean,number,String. 在赋值与传递参数的时候,引用类型传递的是指针,基本包

javascript 基础学习整理

1. javascript是动态语言,脚本语言,弱类型语言. 2. javascript代码在html文件中的位置安排,放在<body></body>内部与外部的区别.如何引用外部的javascript文件. 3. javascript单行注释与多行注释. 4. javascript如何申明变量. 5. javascript分支语句的使用. 6. javascript如何弹出警告框.确认框. 7. javascript函数的编写:带参数.带返回值. 8. javascript函数循

Docker 学习笔记【3】 Docker 仓库、数据卷、数据卷容器,网络基础实操。高级网络配置学习

Docker 学习笔记[4] 高级网络配置实操,实战案例实验 =========================================================================== Docker 学习笔记[2] Docker 仓库实操,创建私有仓库,实操数据卷.数据卷容器,记录开始 =========================================================================== 被格式化的脚本内容: #开头代表