wordpress 近期文章 修改,seo推广公司价格,自动做网站的ai,wordpress秀主题JavaScript中基本数据类型和引用数据类型的区别 这是我引用别人的 觉得很好 1、基本数据类型和引用数据类型 ECMAScript包括两个不同类型的值#xff1a;基本数据类型和引用数据类型。 基本数据类型指的是简单的数据段#xff0c;引用数据类型指的是有多个值构成的对象。 当…JavaScript中基本数据类型和引用数据类型的区别 这是我引用别人的 觉得很好 1、基本数据类型和引用数据类型 ECMAScript包括两个不同类型的值基本数据类型和引用数据类型。 基本数据类型指的是简单的数据段引用数据类型指的是有多个值构成的对象。 当我们把变量赋值给一个变量时解析器首先要确认的就是这个值是基本类型值还是引用类型值。 2、常见的基本数据类型 Number、String 、Boolean、Null和Undefined。基本数据类型是按值访问的因为可以直接操作保存在变量中的实际值。示例 var a 10; var b a; b 20; console.log(a); // 10值 上面b获取的是a值得一份拷贝虽然两个变量的值相等但是两个变量保存了两个不同的基本数据类型值。 b只是保存了a复制的一个副本。所以b的改变对a没有影响。 下图演示了这种基本数据类型赋值的过程 3、引用类型数据 也就是对象类型Object type比如Object 、Array 、Function 、Data等。 javascript的引用数据类型是保存在堆内存中的对象。 与其他语言的不同是你不可以直接访问堆内存空间中的位置和操作堆内存空间。只能操作对象在栈内存中的引用地址。 所以引用类型数据在栈内存中保存的实际上是对象在堆内存中的引用地址。通过这个引用地址可以快速查找到保存中堆内存中的对象。 var obj1 new Object(); var obj2 obj1; obj2.name 我有名字了; console.log(obj1.name); // 我有名字了 说明这两个引用数据类型指向了同一个堆内存对象。obj1赋值给onj2实际上这个堆内存对象在栈内存的引用地址复制了一份给了obj2 但是实际上他们共同指向了同一个堆内存对象。实际上改变的是堆内存对象。 下面我们来演示这个引用数据类型赋值过程 4、总结区别 a 声明变量时不同的内存分配 1原始值存储在栈stack中的简单数据段也就是说它们的值直接存储在变量访问的位置。 这是因为这些原始类型占据的空间是固定的所以可将他们存储在较小的内存区域 – 栈中。这样存储便于迅速查寻变量的值。 2引用值存储在堆heap中的对象也就是说存储在变量处的值是一个指针point指向存储对象的内存地址。 这是因为引用值的大小会改变所以不能把它放在栈中否则会降低变量查寻的速度。相反放在变量的栈空间中的值是该对象存储在堆中的地址。 地址的大小是固定的所以把它存储在栈中对变量性能无任何负面影响。 b 不同的内存分配机制也带来了不同的访问机制 1在javascript中是不允许直接访问保存在堆内存中的对象的所以在访问一个对象时 首先得到的是这个对象在堆内存中的地址然后再按照这个地址去获得这个对象中的值这就是传说中的按引用访问。 2而原始类型的值则是可以直接访问到的。 c 复制变量时的不同 1原始值在将一个保存着原始值的变量复制给另一个变量时会将原始值的副本赋值给新变量此后这两个变量是完全独立的他们只是拥有相同的value而已。 2引用值在将一个保存着对象内存地址的变量复制给另一个变量时会把这个内存地址赋值给新变量 也就是说这两个变量都指向了堆内存中的同一个对象他们中任何一个作出的改变都会反映在另一个身上。 这里要理解的一点就是复制对象时并不会在堆内存中新生成一个一模一样的对象只是多了一个保存指向这个对象指针的变量罢了。多了一个指针 d 参数传递的不同把实参复制给形参的过程 首先我们应该明确一点ECMAScript中所有函数的参数都是按值来传递的。 但是为什么涉及到原始类型与引用类型的值时仍然有区别呢还不就是因为内存分配时的差别。 1原始值只是把变量里的值传递给参数之后参数和这个变量互不影响。 2引用值对象变量它里面的值是这个对象在堆内存中的内存地址这一点你要时刻铭记在心 因此它传递的值也就是这个内存地址这也就是为什么函数内部对这个参数的修改会体现在外部的原因了因为它们都指向同一个对象。 更多专业前端知识请上
【猿2048】www.mk2048.com