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:
复制代码代码如下所示:
警报(人是对象);