本文实例讲述了JavaScript中变量、指针和引用功能与操作。分享给大家供大家参考,具体如下:
1、变量
我们可能产生这样一个疑问:编程语言中的变量到底是什么意思呢?
事实上,当我们定义了一个变量a时,就是在存储器中指定了一组存储单元,并将这组存储单元命名为a。变量a的值实际上描述的是这组存储单元中存放的具体信息。
例如,在JS中
var a;a=10;
第一个语句在存储器中指定了一组存储单元,并命名为a;
第二个语句在这组存储单元中存储了数字10。
变量a的值为10实际上是说存储单元组a存储的信息是10。
假使我们再次对a进行复制操作:
a="hello";
这样a的值变成字符串”hello”。这很容易理解,我们将存储单元组a中存储的信息改为字符串”hello”,显然原先的数字10将被覆盖。
2、指针
假使我们在另一个变量b中存储变量a在存储器的地址,会发生什么?
我们很容易想到,直接访问b变量,得到的并不是变量a的值,而是变量a在存储器中的地址,变量b便被称为指针。
这样一个问题产生了:如何通过变量b访问到变量a的值呢?
在C语言中,常用的是用*,比如:
int c=10,b;int *p;/*p是指向int类型的指针*/p=&c;/* &c获取变量c的地址,然后赋值给变量p,这样p存储的是变量c的地址,即p是指向c的指针*/b=*p;/* *p访问p指向的对象,然后将值赋值给b*/
在JS中,并没有指针这种变量类型,但指针的应用却无处不在。比如:
var o1={b:1};var o2={b:1};o1===o2;//falseo1==o2;//false
这里o1和o2都是相同的对象,为什么不相等呢?这就需要深入理解JavaScript中的引用类型和指针。
首先,我们需要明白:
给o1和o2赋值,并不是o1地址中存储对象
{b:1}
,o2地址中也存储对象{b:1}
。
其次,我们要明白实际发生的操作:
var o1={b:1}
实现了在堆内存中创建了一个对象{b:1},o1则存储了该对象在堆内存中的地址,即o1是一个指针,指向{b:1};同理,
var o2={b:1}
也在堆内存中创建了一个对象{b:1},o2存储了该对象在堆内存中的地址,即o2也是一个指针,指向{b:1};并且,由于两个相同的对象{b:1}是先后创建,在堆内存中也不是存储在相同的地址。
然后,我们还需要知道:
在JavaScript中,引用类型(对象、数组、正则、Date、函数)的比较,实际上是比较指针是否指向存储器中的同一段地址,只有指向同样的地址才能相等。
新闻热点
疑难解答
图片精选