js中值类型和引用类型的区别介绍

js中值类型和引用类型的区别介绍

在JavaScript中,变量分为值类型和引用类型。值类型主要包括基本类型数据,比如数字、字符串、布尔值等,引用类型主要包括对象、数组、函数等。两者在定义、赋值和传递参数等方面有着不同的表现。

值类型

定义

值类型的变量在定义的时候,会直接将数据储存在栈内存中。

let a = 1

赋值

当把一个值类型的变量复制到另一个变量上时,会直接将变量的值复制一份到新的内存地址中。

let a = 1
let b = a

此时,ab 会各自储存一个值为 1 的数据,两者相互独立,互不影响。

传递参数

当把值类型的变量作为参数传递给函数时,会直接把变量的值传递给函数内部的参数,形参和实参互相独立。

function changeValue(num) {
  num = 2
}

let a = 1
changeValue(a)
console.log(a) // 输出1

引用类型

定义

引用类型的变量在定义的时候,会把数据保存在堆内存中,而变量名只是一个指针,指向保存数据的地址。

let obj = {}

赋值

当将一个引用类型的变量赋值到另一个变量上时,会将变量名的指针复制一份到新的内存地址中。

let obj = {}
let obj2 = obj

此时,objobj2 的指针都指向同一个堆内存中的数据,两者都可以对数据进行修改。

obj.a = 1
console.log(obj2.a) // 输出1

传递参数

当把引用类型的变量作为参数传递给函数时,实际上传递的是指针的副本,也就是说,形参和实参指向同一个堆内存中的数据。这时,修改形参会影响实参的值。

function changeValue(obj) {
  obj.a = 1
}

let obj = {}
changeValue(obj)
console.log(obj.a) // 输出1

总之,对于引用类型的变量,修改一个变量会引起其他指向同一份数据的变量发生改变,而值类型的变量则是独立互不影响的。

示例说明

示例1

let a = {name: 'Tom'}
let b = {name: 'Tom'}

console.log(a == b) // 输出 false
console.log(a === b) // 输出 false

因为ab是两个不同的对象,在堆内存中分别分配了不同的地址,所以相等性比较结果为 false

示例2

let a = [1, 2, 3]
let b = a
a.push(4)

console.log(b) // 输出 [1, 2, 3, 4]

因为ab指向同一个数组对象,在堆内存中只分配了一个地址,所以对a的操作也会影响b

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js中值类型和引用类型的区别介绍 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • JS加密插件CryptoJS实现AES加密操作示例

    关于JS加密插件CryptoJS实现AES加密操作的攻略,我这里提供以下完整步骤: 简介 CryptoJS是一个纯JavaScript编写的加密类库,支持的加密算法包括AES、DES、TripleDES、RC4、MD5、SHA-1、HMAC、PBKDF2等。其中AES即高级加密标准,是一种使用对称密钥加密的标准,它使用了128/192/256位密钥,常用的有…

    JavaScript 2023年5月19日
    00
  • 聊聊JavaScript中.?、??、??=的用法以及含义

    当我们在JavaScript中使用对象或者变量时,可能会出现有些属性或者变量是未定义的情况,这时就会用到JavaScript中的三个操作符: . 、?. 、??和??=。下面我将分别详细讲解它们的用法和含义。 . 访问对象属性 首先让我们看下JavaScript中最基本的 . 操作符。这个操作符用于访问对象的属性。例如: const person = { n…

    JavaScript 2023年5月18日
    00
  • js模仿php中strtotime()与date()函数实现方法

    下面我来详细讲解 “js模仿php中strtotime()与date()函数实现方法”的攻略。 1. 背景介绍 在PHP语言中,有两个非常常用的日期函数,分别是strtotime()和date()函数。strtotime()函数可以将任意字符串格式的日期转换为UNIX timestamp时间戳;而date()函数则可以将UNIX timestamp格式的时间…

    JavaScript 2023年5月27日
    00
  • js COL能很好的控制表格的列

    JS COL指的是JavaScript中的HTML DOM元素中的col对象,通过JS代码操作col对象可以对表格中某一列的特征进行修改。 下面是操作表格中某一列时常用的一些属性: align:水平方向上的对齐方式。 width:设置该列的宽度,比如设置width为”100″,则表示该列的宽度为100个像素。 span:设置该列跨几列,比如设置span为”2…

    JavaScript 2023年6月11日
    00
  • javascript实现阻止iOS APP中的链接打开Safari浏览器

    要在iOS APP中实现阻止链接打开Safari浏览器的功能,可以通过以下方法实现: 1. 使用JavaScript 通过JavaScript代码可以控制链接的行为,让其在当前页面打开,而不是打开一个新的Safari浏览器页面。具体的代码实现如下: // 拦截所有超链接打开 safari document.addEventListener(‘click’, …

    JavaScript 2023年6月11日
    00
  • js代码解密代码

    下面是“JS代码解密代码”的完整攻略。 什么是JS代码加密和解密? JS代码加密是为了防止源代码被盗用和反编译,在代码中嵌入了各种加密逻辑和算法来掩盖真实的代码逻辑,以实现反编译困难的目的。 JS代码解密就是将加密的JS代码还原成原来的代码,使得我们可以正常阅读和理解其逻辑,并进行二次开发或调试。 JS代码解密步骤: 分析加密方式 首先,我们需要了解代码被加…

    JavaScript 2023年5月19日
    00
  • js 使用方法与函数 总结第3/4页

    js 使用方法与函数 总结第3/4页 在 JavaScript 中,函数是一种非常重要的概念。本文将总结 JavaScript 函数的使用方法和注意事项。 函数的定义 在 JavaScript 中,函数是一种特殊的对象,可以通过函数声明或函数表达式的方式进行定义。 函数声明的语法如下: function functionName(param1, param2…

    JavaScript 2023年5月18日
    00
  • 了解前端理论:rscss和rsjs

    了解前端理论:rscss和rsjs 什么是rscss? rscss的全称是“Reasonable System for CSS Stylesheet Structure”,中文翻译为“合理的CSS样式表结构系统”。它是一种CSS结构组织的方法论,旨在提供一种有条理、可维护的CSS编写方式。rscss的设计目标是: 可读性:易于阅读和理解的代码结构 可维护:容…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部