JavaScript中的变量

  JavaScript作为一种弱类型编程语言,其变量也是松散类型的。但是,这样松散的缺少拘束的变量规则,总会出现很多问题,而事实上,JavaScript中的变量,其实是包含两种数据类型的值:基本类型值和引用类型值,下面就对于这两种形式的变量值进行区分。

  首先,要明确的一点是,变量只是一个容器,用来存放不同的值,所以说我们进行的所有操作,只是对存储在变量中的值的操作。先对这两种类型的值进行本质上的区分。第一、保存方式不同。基本类型的值只是一个单纯的字符串,它没有属性和方法(当然例如字符串的length属性,以及parseInt()方法等除外),我们指的其实就是我们不能给它们添加属性,而引用类型的值,实际上是一个对象(Object),它们不仅有自己的方法属性,我们还可以给它们添加属性,举个例子:

var oStudent = new Object();  //定义一个对象
oStudent.ID = '123456';  //给这个对象增加了一个属性
alert(oStudent.ID);  //123456

  第二,操作访问方式不同。基本类型的值作为一个确切的数据段,所以说在我们的操作过程中,我们对它的访问方式是按值访问的,也就是说我们进行的任何操作,其实都是对变量中实际的值进行操作的,例如对它修改之后,它原来的值将会被销毁,不复存在。而引用类型的值则与值不同,因为它是一个保存在内存中的一个对象,而JavaScript规定不允许我们直接访问内存地址中的对象,在操作对象的时候,实际上是在操作一个对象的引用,而不是对象本身,我们也可以将其理解为一个类似于指针的东西。

  第三、复制方式不同。从第二点不同,其实我们可以知道,如果要复制一个变量,基本类型的值也是互不干扰的,所以说复制的变量为一个新的变量,和原来的没什么关系,例如 var String1 = "Hello World"; var String2 = String1; 这个时候String1和String2是相互独立的两个变量,你可以改变String2的值,String1也不会受到影响。而引用类型的值则是不一样的,当从一个引用类型的变量向另一个变量复制的时候,也会将存储在变量中的值复制一份放在新变量的内存空间中,但是,这并不是完完全全地复制一份全新的东西出来,而仅仅是一个指针,这个指针还是指向于存储中的对象,这其实就相当于复制完成后,两个变量引用着同一个对象,这个时候,你改变其中的一个值,另外一个变量的值也会改变。我们举个例子,引用类型的值就相当于森林中有一个大宝藏,我们有两份相同的藏宝图分别给了两个人,当其中的一个人率先取得宝藏之后,另外一个人也就只能无功而返了,这中间,两份藏宝图是一模一样的,就相当于复制过的两个变量,而这两份藏宝图指向一个共同的值,那就是一份只此一家的宝藏。我们回到前面那个例子,可以实践一下:

var oStudent = new Object();  //定义一个对象
var oStudent1 = oStudent;      //复制一个相同的对象        
oStudent.ID = '123456';  //给这个对象增加了一个属性
oStudent1.ID = '12345678';        //oStudent1修改了ID属性的值
alert(oStudent.ID);  //再获取oStudent的ID,会不会发生变化呢?

  当然结果和我们想象的一样,oStudent的ID同时也被修改了。

  看完基本类型的值和引用类型的值的区别,我们当然要了解一下JavaScript中有哪些基本类型的值,又有哪些引用类型的值。在JavaScript中,共有五种基本类型的值,分别是:Undefined、Null、Boolean、Number和String。而引用类型的值就是一个对象,在JavaScript中,将这些引用类型的值进行数据和功能的封装,形成了一些方便的引用类型,常见的有:Object类型、Array类型、Date类型、RegExp类型、Function类型。当然,我们在后面会一一详细了解。

原文地址:https://www.cnblogs.com/fanyj/p/4601917.html