手机版

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

时间:2021-09-09 来源:互联网 编辑:宝哥软件园 浏览:

ECMAScript变量包含两种不同数据类型的值:基类型值和引用类型值。基本类型值是简单的数据段,而引用类型值是指可能由多个值组成的对象。

向变量赋值时,解析器必须确定该值是基本类型还是引用类型。基本类型包括未定义、空、布尔、数字和字符串。这五种基本类型的数据类型是通过值来访问的,因此存储在变量中的实际值可以被操作。引用类型的值是存储在内存中的对象。与其他语言不同,JavaScript不允许直接访问内存中的位置,也就是说,它不能直接操纵对象的内存空间。操作对象时,实际操作的是对象的引用,而不是实际的对象,因此引用类型的值是通过引用来访问的。

1.定义动态属性的基本类型和定义引用类型的方法有很大的不同。对于引用类型的值,我们可以为其添加属性和方法,也可以更改和删除其属性和方法如下:复制代码如下: var person=new Object();person.name=' zxjalert(person . name);//'zxj '

2.复制变量值

如果将基本类型的值从一个变量复制到另一个变量,则会在变量对象上创建一个新值,然后复制到为新变量分配的位置。复制代码如下: var num 1=5;var num2=num1//5

将引用类型的值从一个变量复制到另一个变量时,还会将变量对象中存储的值复制到为新变量分配的内存空间中。不同的是,这个值实际上是一个指针,这个指针执行一个存储在堆中的对象。复制后,这两个变量实际上会引用同一个对象。因此,更改一个变量将影响另一个变量,如下所示:

复制代码如下: var obj 1=new Object();var obj2=obj1obj 1 . name=' zxj ';alert(obj 2 . name);//'zxj '

3.传输参数

ESMAScript中所有函数的参数都是通过值传递的。也就是说,将函数外部的值复制到函数内部的参数,与将值从一个变量复制到另一个变量是一样的。基本类型值的传输与基本类型变量的复制相同。引用类型值的传递与引用类型变量的复制相同。许多开发人员在这一点上可能会感到困惑,因为有两种方法可以通过值和引用来访问变量,而参数只能通过值来传递。

当基本类型的值传递给参数时,传递的值被复制到局部变量(命名参数)。如下代码所示:复制代码如下:函数加十(num){ num=10;返回数字;}var计数=20;var结果=addTen(计数);警报(计数);//20、无变化预警(结果);//30参数实际上是函数的局部变量。参数num和变量count彼此不知道,它们只有相同的值。如果num是通过引用传递的,变量count的值也将变为30,从而反映函数的内部变化。

当将引用类型值传递给参数时,内存中该值的地址将被复制到局部变量中,因此局部变量的变化将反映在函数外部。这里我们用引用类型来看一下:复制代码如下:函数集名称(obj) {obj。名称=' zxj} var person=new Object();setName(人);alert(person . name);//'zxj '

在这个函数中,obj和person指的是同一个对象。换句话说,即使这个对象是通过值传递的,obj也会通过引用来访问同一个对象。因此,当name属性被添加到函数内部的obj时,函数外部的人也会反映出来,因为堆内存中只有一个person指向的对象,而且是全局对象。很多开发人员错误地认为在局部范围内修改的对象会反映到全局范围内,这意味着参数是通过引用传递的。为了证明对象是通过值传递的,我们来看看下面的修改示例:复制代码如下:函数集名称(obj) {obj。名称=' zxjobj=新对象();obj.name=' sdf} var person=new Object();setName(人);alert(person . name);

从上面的例子可以看出,如果通过引用传递person,那么person会被自动修改为指向一个名称属性值为‘SDF’的新对象。然而,当你再次访问person.name时,它仍然显示“zxj”。这意味着,即使在函数内部修改了参数值,原始引用也保持不变。事实上,当在函数内部重写obj时,变量指的是一个局部对象。该本地对象将在函数执行后立即被销毁。

您可以将ECMAScript函数的参数视为局部变量。

4.测试类型

虽然typeof是检测基本数据类型的好助手,但这个运算符在检测引用类型时用处不大。通常,我们不想知道一个值是一个对象,而是想知道它是一个什么样的对象。为此,ECMAScript提供了instanceof运算符,其语法如下:复制代码如下: Result=变量instanceof Constructor如果变量是给定引用类型的实例,instanceof运算符将返回true:复制代码如下: Alert(对象的Person实例);

版权声明:JavaScript数据类型的基本类型和引用类型的值是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。