JavaScript—基本类型和引用类型的区别

在看js高级程序设计时,发现这部分虽然简单,但是我自己有些地方经常混淆,总结如下:

(一)基本概念

JS中可以把变量分成两部分,基本类型和引用类型。

基本类型比较简单,包括:Undefined、Null、Boolean、Number和String,基本类型值就是简单的数据段;引用类型值可能由多个值构成的对象。

引用类型值保存在内存中,而JS是不能直接访问内存的,所以对于引用类型,操作的不是实际的对象而是对象的引用。

(二)基本类型值和引用类型值的区别

a、动态属性

只能给引用类型值动态的添加属性,举例如下:



var obj = new Object();

obj.name ="zhangsan";

alert(obj.name); //zhangsan

但是不能给基本类型的值添加属性,尽管不报错,举例如下:

var name="zhangsan";
name.age=21;
alert(name.age); //undefined

b、复制变量值

从一个变量向向另一个变量复制基本类型值时,会在变量对象上创建一个新值,两个变量中的值是相互独立的。举例如下:

var num1=5;

var num2=num1;

下图形象展示了复制基本类型值的过程:

   
   
num1
5(Numbei类型值)

复制前的变量对象

   
num2 5(Numbei类型值)
num3 5(Numbei类型值)

复制后的变量对象

从一个变量向向另一个变量复制引用类型值时,也会在变量对象上创建一个新值,不同的是这个新值是一个指针,因此复制

结束后,两个变量实际上引用的是同一个对象。改变其中一个也会影响另外一个,举例如下:

var obj1=new Object();

var obj2=obj1;

obj1.name="zhangsan"; 

alert(obj2.name); //zhangsan

下图展示了保存在变量中的对象和保存在堆中的对象之间的关系:

c、传递参数

js中所有函数的参数都是按值传递的。以下三个例子很好的说明了这一点:

(1)向参数传递基本类型值

function addTen(num){
      num+=10;
      return num;
}
var count=20;
var result=addTen(count);
alert(count);  //20
alert(result);  //30

由于参数实际上是函数的局部变量,因此函数内部参数的变化不会影响函数外部的count变量。参数num与count互相独立。

(2)向参数传递对象(对象是引用类型值)

function setName(obj){
      obj.name="zhangsan";
}

var person=new Object();
setName(person);
alert(person.name);  //zhangdan

以上代码中创建了一个对象,并将其保存在了变量person中。然后,这个变量被传递到了setName()函数中并被复制给了obj。

在函数内部,obj和person引用的是同一个对象。于是,当在函数内部为obj添加name属性后,函数外部的person也会有所反应。

因此,会误导我们,参数是按引用传递的。

(3)向参数传递对象,对上例进行更改进一步说明了参数是按值传递的。

function setName(obj){
      obj.name="zhangsan";
      obj=new Object();
      obj.name="Greg";
}

var person=new Object();
setName(person);
alert(person.name);  //zhangdan

上述例子中,person的值并没有因为obj的修改而改变,说明不是按引用传递的。如果是按引用传递的,obj和person指向同一个对象,当obj改变,person也会改变。

d、检测类型

typeof用于检测简单类型,对于对象,我们更想知道的是什么类型的对象。所以引进了instanceof操作符。

例如:alert(person instanceof Object);  //变量person是Object类型吗?如果是返回true,不是返回false.

注意:所有引用类型都是Object实例,在检测一个引用类型值和Object构造函数时,instanceof始终返回true。而instanceof检测基本类型的值,始终返回false,因为

基本类型不是对象。

以上是基本类型和引用类型的不同之处。

时间: 2024-11-06 10:16:17

JavaScript—基本类型和引用类型的区别的相关文章

javascript中基本类型和引用类型的区别分析

大多数人系统学习过的程序设计语言,在这些语言的学习过程中最早学到的几个要点之一就是值类型和引用类型的区别.下面我们来看一下在 JavaScript 中基本数据类型(Primitive Types)和引用类型(Reference Types)的区别.. 基本类型和引用类型 ECMAScript包含两个不同类型的值:基本类型值和引用类型值.基本类型值指的是简单的数据段:引用类型值指由多个值构成的对象.当我们把变量赋值给一个变量时,解析器首先要做的就是确认这个值是基本类型值还是引用类型值. 常见的五种

[转]javascript中基本类型和引用类型的区别分析

基本类型和引用类型 ECMAScript包含两个不同类型的值:基本类型值和引用类型值.基本类型值指的是简单的数据段:引用类型值指由多个值构成的对象.当我们把变量赋值给一个变量时,解析器首先要做的就是确认这个值是基本类型值还是引用类型值. 常见的五种基本数据类型是: Undifined.Null.Boolean.Number和String.这五种基本数据类型可以直接操作保存在变量中的实际值. 看下面例子: ? 1 2 3 4 5 6 7 8 9 var a = 10; var b = a;    

JavaScript基本类型和引用类型的值

JS变量可能包含两种不同数据类型的值:基本类型值和引用类型值.基本类型指的是简单的数据段,而引用类型值那些由多个值构成的对象: 在将一个值赋给变量时,解析器必须确定这个值是基本类型值还是引用类型值.JS有5种基本数据类型:Undefined, Null,Boolean,Number和String.这5种基本数据类型是按值访问的.因为可以操作保存在变量中的实际的值. 引用类型的值保存在内存中的对象.与其他语言不同,JavaScript不允许直接访问内存中的位置,也就是说不能直接操作对象的内存空间.

javascript 基本类型和引用类型的值【javascript高级程序设计】

ECMAScript变量可能包含两种不同数据类型的值:基本类型值和引用类型值. 基本类型值指的是那些保存在栈内存中的简单数据段,即这种值完全保存在内存中的一个位置. 而引用类型值则是指那些保存在堆内存中的对象,意思是变量中保存的实际上是一个指针,这个指针指向内存中的另一个位置,该位置保存对象. 5中基本数据类型:Undefined.Null.Boolean.Number和String. 这5种基本数据类型的值在内存中占有固定大小的空间,因此可以把它们的值保存在栈内存中. 这样可以提高查询的速度.

javascript基本类型和引用类型

基本类型(null.undefined.boolean.number.string)和引用类型(Object 对象) 1  基本类型:只能不存一个值,一种类型:从一个变量向另一个变量复制基本类型的值,会在变量对象上创建一个新值,然后把该值复制到为新变量分配的位置上,var num1 = 5:var num2 = num1:这样num1和num2 是完全独立的,操作互不影响. 2  引用类型:创建一个对象,可以添加.修改.删除属性和方法:当一个变量向另一个变量复制引用类型值时,同样也会将存储在变量

【js】基本类型和引用类型的区别

1.保存方式:(一脸懵逼???) 基本类型是按值访问的,可以在变量的生命周期改变它,但是它是储存在哪里的呢?在浏览器缓存吗?[执行环境中定义的所有变量和函数都存储在执行环境的变量对象里,变量对象我们编写的代码无法访问,但是解析器在处理数据的时候会在后台调用] 引用类型的值保存在内存中,js对访问内存位置有所限制(这种限制如何理解?),当我们复制的时候操作的是对象的引用,当我们为对象删除或添加属性的时候,操作的是实际的变量. 2.动态的属性: 引用类型可以添加删除修改属性,而基本类型没有属性 3.

js中函数参数基本类型和引用类型的区别

高级程序设计中说明,所有函数的参数都是按值传递的. 基本类型 向参数传递基本类型的值时,被传递的值会被复制给对应的命名参数 function addTen(num){ num=+10; return num; } var count=20; var result=addTen(count); alert(count);//20 在函数内部,num的值被加上10,但不影响外部count变量的值 引用类型 在向参数传递引用类型的值时,把这个值在内存中的地址复制给对应的局部变量,如果这个局部变量没有重

Javascript中的基本类型和引用类型

一.基本类型和引用类型概述 js中数据类型的值包括:基本类型值和引用类型值 基本数据类型:undefined;null;boolean;number;string 引用类型值:保存在内存中,js不允许直接访问内存位置,因此时操作引用而不是实际对象 二.如何检测数据类型 1.基本数据类型的检测:使用typeof var s = "AAA"; alert(typeof s); //返回string `     2.引用类型(对象类型)检测:使用instanceof alert(person

基本类型和引用类型

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "PingFang SC" } p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "PingFang SC"; min-height: 1