详解JavaScript变量:基本类型与引用类型的区别

作者:函数茶馆

时间:2026-10-23

浏览:461

本文深入解析JavaScript中基本类型与引用类型的核心区别。涵盖动态属性添加、变量赋值时的值复制与引用复制机制,以及函数参数按值传递的具体表现。同时介绍使用typeof和instanceof进行类型检测的方法,帮助开发者准确理解内存分配与数据访问方式。

文章目录

基本类型与引用类型的定义

在ECMAScript中,变量主要包含两种数据类型的值:基本类型和引用类型。

  • 基本类型指的是简单的数据段,包括Undefined、Null、Boolean、Number和String。
  • 引用类型则是由多个值构成的对象。

动态属性的添加

1. 动态属性

定义两者的值时,需要创建一个变量并为其赋值。

在执行两者的值时:

  • 对于引用类型,可以动态添加、删除属性和方法。
  • 对于基本类型,不能添加、删除属性和方法。

例如:引用类型变量a可以添加name和age属性。


var a = new Object();
a.name = "杨子龙";
a.age = 24;
console.log(a.name);      //杨子龙

而基本类型变量name无法添加age属性。


var name = "杨子龙";
name.age = 24;
console.log(name.age);     //undefined

从代码中可知:只能给引用类型值动态地添加属性,以便将来使用。

变量值的复制机制

2. 赋值变量值

当一个变量向另一个变量复制基本类型值和引用类型值时:

基本类型:在变量对象上创建一个新值,并将其复制给新变量分配的位置上(形成完全独立的两个变量)。

例如


var a = 111;
 var b = a;
 console.log(b);     //111

从代码中可知:变量b的值只是变量a的值的一个副本,两者的值111是完全独立的。

引用类型:将存储在变量对象中的值复制一份放到为新变量分配的空间中(引用同一个对象的两个变量)。

引用类型的值的副本实际是一个指针,指向存储在堆中的一个对象。


var obj1 = new Object;
var obj2 = obj1;
obj1.name = "杨子龙";
console.log(obj2,name);     // Object { name="杨子龙"} 杨子龙

从代码中可知:obj1和obj2都指向同一个对象Object;因此,为obj1添加的name属性,通过obj2也可以访问到。

函数参数的传递方式

3. 传递参数

我们知道基本类型是按值访问的,因为可以访问保存在变量中的实际的值。

所有函数的参数都是按值传递的。

基本类型:基本类型值的传递如同基本类型变量的复制一样。

在向参数传递值时,被传递的值会被复制给一个局部变量(命名参数),因此这个局部变量的变化不会反映在函数的外部。 例如:


function fn(num) {
 num += 10;
 return num;
}
var a = 10;
var result = fn(a);
console.log(result);  //20
console.log(a);    //10

从代码中可知:参数num和变量a互不相识,只是有着相同的值而已,函数执行完毕后,两者互不影响。 引用类型:引用类型的传递如同引用类型变量的复制一样。 在向参数传递值时,会把这个值在内存中的地址复制给一个局部变量,因此这个局部变量的变化会反映在函数的外部。 例如:


function fn(obj) {
 obj.name = '杨子龙';
}
var person = new Object();
fn(person);
console.log(person.name);   //杨子龙

从代码中可知:在这个函数内部,参数obj和变量person引用的是同一个对象Object,因此,修改参数obj会影响原始变量person。 也就是说:即使变量person是按值传递的,但是参数obj(想象成局部变量)还是会按引用来访问同一个对象。 访问变量有按值和按引用两种方式,参数只能按值传递。

类型的检测方法

4. 检测类型

基本类型:使用typeof。 引用类型:使用instanceof(对象或null)。 例如:


var a = 'Yang Zilong';
var b = 24;
var c = '';
var d = true;
var e;
var g = undefined;
var f = null; // 比较特殊
var h = new Object();

console.log(typeof a); //string
console.log(typeof b); //number 
console.log(typeof c); //string
console.log(typeof d); //boolean
console.log(typeof e); //undefined
console.log(typeof g); //undefined
console.log(typeof f); //object
console.log(typeof h); //object

所有引用类型的值都是Object的实例。 如下:


var person = new Object();
var num = [1,2, 3];
var pattern = /.at/i;
console.log(person instanceof Object);  //true
console.log(num instanceof Object);  //true
console.log(num instanceof Array);   //true
console.log(pattern instanceof Object); //true
console.log(pattern instanceof RegExp); //true

使用instanceof检测基本类型,会返回false,因为基本类型不是对象。

以上所述是小编给大家介绍的JavaScript 的变量详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对本站网站的支持!

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章