javacript中的引用

本文深入探讨了JavaScript中引用的概念,包括引用如何使多个变量指向同一对象,并解释了这种机制如何影响对象属性的变化。同时,文章还讨论了字符串连接操作如何产生新对象而非修改原有对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引用的概念是javascript的基础之一,引用是一个指向对象实际位置的指针。这是一个极为强大的特性。但有一个前提:实际的对象肯定不会是引用。字符串永远是字符串,数组永远是数组。不过多个变量却能够指向同一对象。Javascript基于的就是这样一个引用系统。这门语言通过维护一系列对其他对象的引用,提高了极大的灵活性。

此外,对象可以包含一系列属性,这些属性也都不过是到其他对象(比如字符串、数字、数组等等)的引用。如果多个变量指向的是同一个对象,那该对象的类型一改变,所有这些变量也会跟着相应的改变。如下所示:两个变量都指向同一个对象,而该对象内容的修改对这两个变量都会产生影响。

例子:多个变量引用同一个对象

//obj置为空对象

Var obj=new Object();

//objRef现在是另一个对象的引用

Var objRef=obj

//修改原对象的一个属性

Obj.oneProperty=true;

//我们现在看到,这个改变在两个变量中都反映了出来

//(因为它们引用的是同一个对象)

Alert(obj.oneProperty===objRef.oneProperty)

前文提到,自修改对象在javascript中式很少见的。我们可以来看一个最常出现这种情况的实例:用push()方法来给数组(array)对象添加新元素。因为Array对象实质上是把这些值作为属性保存。多个变量的内容可以同时被修改。

例子:自修改对象的例子

//创建一个数组

Var items=new Array”one”,”tow”,”three”);

//创建数组的一个引用

Var itemsRef=items;

//将一个元素添加到原数组中

Items.push(“four”);

//这两个数组的长度应该是一致的。

//因为他们指向同一个数组对象

Alert(items.length==itemsRef.length);

必须记住的是,引用指向的只能是具体的对象,而不是另一个引用,不像perl语言中允许多层引用。Javascript里的结构式沿着引用链一直上溯到原来的那个对象。如下列所示。一个例子:实际对象已经改变了,但原来指向它的引用仍然保持指向旧的对象。

例子:修改对象的引用,同时保持完整性

//items置为字符串的数组

Var items=new Array(”one”,”tow”,”three”);

//itemsRef置为items的引用

Var itemsRef=items

//items置为一个新对象

Items=new Array”new”,”array”;

//itemsitemsRef现在指向不同的对象了。

//items指向的是Array”new”,”array”;

//itemsRef指向的是Array(”one”,”tow”,”three”);

Alert(items!=itemsRef);

最后,让我们来看一个特殊的例子,看似是自修改对象,其结果却产生了一个新的非引用对象。在执行字符串连接操作时,结果总会是一个新的字符串对象,而非原字符串的修改版本

例子:修改对象而生成新的对象

//item置为一个新的字符串对象

Var item=”test”;

//itemRef现在指向同一个字符串对象

Var itemRef=item;

//将一些新的文本接在这个字符串后面

//注意:这会创建一个新对象,而非修改原对象

Item+=”ing”

//itemitemsRef的值不相等,因为新的字符串对象已被创建

Alert(item!=itemRef)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值