JavaScript 引用类型

本文通过一个具体的示例探讨了JavaScript中引用类型的特性。实验证明,当修改对象属性时,会影响到所有引用该对象的地方;但当对象本身被重定向时,则不会影响到其他引用处,它们会保持原有引用不变。

在JS中,数值、布尔值、null和undefined属于基本类型,而对象、数组和函数属于引用类型。

该博文要解决的两个问题是:

  • 当A引用B后,A与B的关系是:== 、===,还是其它。
  • 当A引用B后,B被重定向后,A是保持原引用,还是跟随B的新指向。

/**
 * Filename: AppointTest.js
 * Description: This file is use to find out how a appiont work.
 * Author: 猎空de代码
 * Date: 2012/3/8
 */
Ext.onReady(function() {
	/**
	 * Function for print
	 */
	var print = console.log;
	var printAll = function(arr, obj) {
		print("arr[0] = " + Ext.encode(arr[0]));
		print("obj = " + Ext.encode(obj));
		print(arr[0] == obj);
		print(arr[0] === obj);
	}
	
	/**
	 * Test data
	 */
	var obj = {
		name: '猎空de代码'
	}
	var arr = [obj];
	
	obj.age = 23;//这个新增的属性,是否会加入到arr中?
	printAll(arr, obj);
	
	// Redirect obj to another Object.
	obj = {
		hobby: 'thinking'
	}
	printAll(arr, obj);//重定向obj后,arr[0]变了吗?
});

运行结果图:

由上图可以看到,新加入age属性同时影响了arr;

但是当obj重定向后,arr并不跟随obj而变化,而是指向原引用。

### JavaScript 引用类型概述 在 JavaScript 中,引用类型主要包括对象(`Object`)、数组(`Array`)以及函数(`Function`),这些数据结构允许开发者创建更复杂的程序逻辑并管理大量数据。 #### 对象 (Object) 对象是一种键值对集合,其中每个键都是字符串 Symbol 类型,而对应的值可以是任何有效的 JavaScript 值。这使得对象非常适合用来表示具有多个属性的事物。例如: ```javascript const person = { name: 'Alice', age: 25, isStudent: false }; ``` 通过这种方式定义的对象 `person` 可以方便地访问其各个字段,如 `person.name`, `person.age` 等[^1]。 #### 数组 (Array) 尽管数组看起来像是简单列表形式的数据容器,但实际上它也是一种特殊的对象,在内部实现了许多有用的方法来操作序列化数据集。值得注意的是,虽然理论上可以在同一个数组内混合不同类型的数据项,但从代码清晰度和性能角度考虑,最好保持一致性[^3]。 下面是一个包含多种数值类型的数组实例: ```javascript let mixedDataTypes = ['string', 42, true]; console.log(mixedDataTypes); // 输出 ["string", 42, true] ``` 此外,由于数组属于引用类型的一部分,因此当传递给其他变量时实际上共享同一份底层数据副本而非复制整个内容。这意味着修改其中一个地方会影响到另一个位置所指向的内容。 #### 函数 (Function) 除了作为执行单元外,函数本身也可以被当作普通值一样处理 —— 它们能够赋值给变量、参数传入另一些方法调用甚至返回成为结果的一部分。这种灵活性赋予了 JavaScript 更强大的编程范式支持,比如闭包机制就是基于此特性实现的。 这里展示了一个简单的匿名函数表达式的例子: ```javascript function greet(name) { console.log(`Hello ${name}`); } greet('World'); // 输出 Hello World ``` 综上所述,理解如何有效利用上述三种主要引用类型对于掌握 JavaScript 编程技巧来说非常重要。合理运用它们可以帮助构建更加模块化的应用程序架构,并提高整体开发效率[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值