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

yizhihongxing

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用最简单的方法实现四舍五入

    下面是详细讲解“JS用最简单的方法实现四舍五入”的攻略。 1. 方法一:使用Math.round()函数 JS中自带一个方法Math.round(),可以实现四舍五入功能,方法如下: Math.round(x) // x为需要四舍五入的数字 示例代码: var num1 = 12.3; var num2 = 12.6; console.log(Math.ro…

    JavaScript 2023年5月28日
    00
  • JS中URL.createObjectURL使用示例讲解

    JS中URL.createObjectURL使用示例讲解 什么是URL.createObjectURL? 在JavaScript中,URL.createObjectURL() 是一种方便的方法,可以将 Blob 或 文件对象转换为一个URL字符串,用于引用和使用。 URL.createObjectURL的语法 objectURL = URL.createOb…

    JavaScript 2023年5月27日
    00
  • javascript学习随笔(使用window和frame)的技巧

    JavaScript学习随笔:使用Window和Frame的技巧 在本文中,我们将深入了解JavaScript中Window和Frame对象的使用技巧。这些对象是JavaScript中最基本的对象之一,也是Web开发必不可少的一部分。本文将涵盖以下内容: Window对象和Frame对象的区别 如何访问和操作窗口对象 如何访问和操作框架(Frame)对象 示…

    JavaScript 2023年6月11日
    00
  • jquery+css实现动感的图片切换效果

    下面是详细讲解“jquery+css实现动感的图片切换效果”的完整攻略。 效果展示 这是一段使用jQuery和CSS实现的图片切换效果。 演示链接:https://codepen.io/jiekezaohua/pen/XWKbxKd 整体思路 使用CSS定义一个固定大小和位置的容器div,并将其中的图片置于其中; 使用jQuery监听图片列表中的mousee…

    JavaScript 2023年6月11日
    00
  • JavaScript实现PC端横向轮播图

    下面是JavaScript实现PC端横向轮播图的完整攻略: 准备工作 要实现PC端横向轮播图,需要先准备好以下几点: HTML结构,即容器元素及其子元素,通常是一个div包裹符合数量的图片(img标签)。 CSS样式,如容器元素宽高、溢出隐藏、子元素浮动、统一宽高等。 JS代码,用来实现轮播图的滑动效果,具体实现方式后面会讲到。 实现步骤 确认容器元素的宽度…

    JavaScript 2023年6月11日
    00
  • JS正则表达式验证账号、手机号、电话和邮箱是否合法

    下面我将介绍使用JavaScript正则表达式来验证账号、手机号、电话和邮箱是否合法的方法。 验证账号 账号的验证规则是由字母、数字、下划线组成的,长度为4-16位。我们可以使用正则表达式来进行验证。具体代码如下: function validateUsername(username) { var pattern = /^[a-zA-Z0-9_]{4,16}…

    JavaScript 2023年6月10日
    00
  • JS动态插入脚本和插入引用外部链接脚本的方法

    JS动态插入脚本和引用外部链接脚本是 Web 开发中常用的技术,可以使页面具有动态性和互动性。下面是详细的攻略。 动态插入脚本的方法 动态插入脚本可用于在 Web 页面中动态地加载并执行 JavaScript 代码。一般来说,动态插入脚本的步骤如下: 创建 script 标签并设置其 type 属性为 text/javascript。 将 JavaScrip…

    JavaScript 2023年5月27日
    00
  • JS实现悬浮移动窗口(悬浮广告)的特效

    要实现JS实现悬浮移动窗口(悬浮广告)的特效,需要以下步骤: 1. HTML结构准备 首先,需要在HTML文件中添加一个div作为悬浮窗口的容器,以及一个button作为关闭悬浮窗口的按钮。例如: <div id="float-window"> <button id="close-button"&gt…

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