30、关于赋值和引用
2016-07-12 21:08
344 查看
关于 = :
赋值: ( number string boolean …… )
引用: ( object(数组也为object) function )
1、赋值
var a=1;
var b=a;
b++;
alert(a);//=1
alert(b);//=2
申明了变量a并赋值=1,然后新申明变量b,赋值=a,那么此时b就=1。下一步,变量b自增1,最后弹出a、b 。结果很明显,也很正常。
2、引用
var a1=[1,2];
var a2=a1;
a2.push(3);
alert(a1);//=1,2,3
alert(a2);//=1,2,3
申明了变量a1并赋值数组,然后新申明变量a2,赋值=a1,那么此时a2=数组[1,2]。操作a2加入新元素3,那么a2就为[1,2,3],按照常理来说a1应该不变。而结果是a1也等于[1,2,3]。这是因为数组的赋值是为引用,在js中所有对象的赋值都为引用。虽然a2=a1,但不不像变量那样单独赋值,而是引用了数组a1,而操作了a2,就相当等于同时操作了a1。就好比现实中,某人买了一套房子,然后他结婚了,再复制了一份钥匙给妻子,妻子对房子的操作与丈夫对房子的操作是等效的。
3、对象赋值
那么如何对象赋值呢,而不是简单的引用?
var a3=[1,2];
var a4=[];
for(var i in a3)
{
a4.push(a3[i]);
}
a4.push(3);
alert(a3);//=1,2
alert(a4);//=1,2,3
赋值: ( number string boolean …… )
引用: ( object(数组也为object) function )
1、赋值
var a=1;
var b=a;
b++;
alert(a);//=1
alert(b);//=2
申明了变量a并赋值=1,然后新申明变量b,赋值=a,那么此时b就=1。下一步,变量b自增1,最后弹出a、b 。结果很明显,也很正常。
2、引用
var a1=[1,2];
var a2=a1;
a2.push(3);
alert(a1);//=1,2,3
alert(a2);//=1,2,3
申明了变量a1并赋值数组,然后新申明变量a2,赋值=a1,那么此时a2=数组[1,2]。操作a2加入新元素3,那么a2就为[1,2,3],按照常理来说a1应该不变。而结果是a1也等于[1,2,3]。这是因为数组的赋值是为引用,在js中所有对象的赋值都为引用。虽然a2=a1,但不不像变量那样单独赋值,而是引用了数组a1,而操作了a2,就相当等于同时操作了a1。就好比现实中,某人买了一套房子,然后他结婚了,再复制了一份钥匙给妻子,妻子对房子的操作与丈夫对房子的操作是等效的。
3、对象赋值
那么如何对象赋值呢,而不是简单的引用?
var a3=[1,2];
var a4=[];
for(var i in a3)
{
a4.push(a3[i]);
}
a4.push(3);
alert(a3);//=1,2
alert(a4);//=1,2,3
相关文章推荐
- C语言通用数据类型链表的实现,(数据域为指针,可指向任意类型数据)
- Java类初始化顺序规律
- JavaScript实现Tab标签页切换的最简便方式
- Python中的callable是基于什么样的机制实现的
- RMQ(ST表)的一些应用 CF475D&&CF386C
- 本篇内容简要介绍BASE64、MD5、SHA、HMAC几种加密算法。
- 为什么要重写toString()方法和hashcode()方法
- shell中的退出状态码
- Java虚拟机学习总结一
- jsp、servlet、javabean
- Java中的修饰符
- FindBugs实践
- tr
- 51nod1006 最长公共子序列Lcs
- Codeforces 526E Transmitting Levels
- Android生成xml
- PHP开发环境配置
- JAVA 类与继承 原理 面试 笔试
- TOM猫部分代码
- 解决Android Stuio 的Gradle sync failed: Gradle DSL method not found: 'android()'