Javascript数据类型的基本类型和引用类型的值。

ECMAscript变量包含不同数据类型的值:基本类型的值和引用类型的值。基本类型的值是一个简单的数据段,而引用类型的值是指可以由多个值的对象。

当一个值赋给一个变量时,解析器必须确定该值是基本类型还是引用类型。基本类型包括未定义的、空的、布尔的、数字和字符串。5基本数据类型的访问的价值,所以他们可以操纵存储在变量的实际值,而引用类型的类型的值存储在内存中的对象。与其他语言不同,Javascript不允许直接访问内存,地点是,它不能直接操纵的对象的内存空间当对象的操作,实际上操作对象的引用而不是实际的对象,所以对引用类型的值是通过参考。

1。动态特性

定义基本类型和定义引用类型的方法。对于引用类型的值,我们可以向它添加属性和方法,也可以更改和删除它的属性和方法,如下所示:

复制代码代码如下所示:

var =新对象();

person.name =ZXJ ;

警报(人的名字); / / ZXJ



2。复制的变量值

如果一个基本类型的值从一个变量复制到另一个变量,它将在变量对象上创建一个新值,并将其复制到分配给新变量的位置。

复制代码代码如下所示:

VaR num1 = 5;

VaR num2 = num1; / / 5





引用类型的值是从一个变量复制到另一个,它也复制一个值存储在变量对象在内存空间分配给新的变量,不同的是,这个值是一个指针,而指针执行对象存储在堆中,复制完成后,两变量实际上指的是同一个对象。所以,改变一个变量会影响另一个变量,如下图所示:

复制代码代码如下所示:

var obj1 =新的对象();

var obj2 = obj1;

obj1.name =ZXJ ;

警报(obj2。名称); / / ZXJ





三.传递参数

在ESMAscript的所有函数的参数是按值传递,复制以外的值函数在函数内部,即参数,复制值从一个变量到另一个。基本型的转移价值为基本类型变量的副本一样,一引用类型的值转换为一个引用类型变量的副本一样,许多开发商可能会疑惑,在这一点上,因为访问变量的值与参考模式,而只能通过值传递参数。

当基本类型的值传递给参数时,传递的值被复制到一个本地变量(称为命名参数):

复制代码代码如下所示:

功能addten(NUM){

数字= 10;

返回num;

}

var计数= 20;

var result = addten(计数);

警报(计数);20,没有变化

警报(结果);30



参数实际上是函数的一个局部变量。参数值和变量计数彼此不知道,它们只有相同的值。如果按引用传递数值,则变量计数的值也将变成30,从而反映函数中的变化。

当引用类型的值传递给参数时,该值被复制到内存地址中的本地变量,因此本地变量的变化将反映在函数之外。

复制代码代码如下所示:

功能集名称(obj){

obj.name =ZXJ ;

}

var =新对象();

setName(人);

警报(人的名字); / / ZXJ



在功能、目标和个人引用同一个对象。换句话说,即使对象是按值传递对象也会参考访问相同的对象。因此,OBJ函数内部添加name属性时,函数外的人也会有所体现,因为人是在堆记忆中只有一个对象,它是全局对象,许多开发商错误的对象在局部范围内改性体现在全球范围内,说明该参数是按引用传递的。为了证明对象是按值传递的,我们看下面的例子已被修改。

复制代码代码如下所示:

功能集名称(obj){

obj.name =ZXJ ;

obj =新的对象();

obj.name =自卫队;

}

var =新对象();

setName(人);

警报(人名);



正如你可以看到从上面的例子,如果人是按引用传递,然后人会自动修改为指向的名字属性是自卫队的新目标。然而,当下次访问person.name,显示仍然是ZXJ。这意味着,即使在参数的值在函数中修改,原参考仍保持不变。事实上,当目标是改写函数内的变量,指的是一个本地对象。这个地方的对象将被立即销毁当函数结束的时候。

的ECMAscript函数的参数可以被想象为一个局部变量。

4、检测类型

虽然类型是一个功能强大的辅助测试时的基本数据类型、运算符不是非常有用的当它是参考型检测。一般来说,我们不想知道,一个值是一个对象,但要知道他是什么类型的对象。为此,ECMAscript提供instanceof运算符,其语法如下:

复制代码代码如下所示:

结果=变量实例构造函数



如果变量是一个给定的参考类型,instanceof运算符返回TRUE:

复制代码代码如下所示:

警报(人是对象);