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日

相关文章

  • vue3的api解读之ref和reactive示例详解

    下面是针对“vue3的api解读之ref和reactive示例详解”的完整攻略: 1. 什么是 ref 和 reactive? ref: 用来创建一个响应式对象,它会返回一个带有 value 属性的对象,这个 value 属性可以自动更新页面。 reactive:用来创建一个响应式对象,它会将对象中所有属性都转化为响应式数据,任何一个属性发生变化都能触发相应…

    JavaScript 2023年6月11日
    00
  • Asp.Net 不同的OnClick事件区别小结(onserverclick,onclientclick)

    Asp.Net中常用的OnClick事件主要有两种,分别是onserverclick和onclientclick,并且它们在应用场景和使用方法上也有所差别。 1. onserverclick 事件 onserverclick 事件通常用于向服务器端发送请求,server端通过回调函数的形式完成事件绑定,一般在 aspx.cs 文件中实现。 <asp:B…

    JavaScript 2023年6月11日
    00
  • js中cookie的添加、取值、删除示例代码

    下面是JS中操作Cookie的完整攻略,包括添加、取值、删除示例代码: 添加Cookie 在JS中添加Cookie,我们可以利用document.cookie来设置Cookie值。下面是添加Cookie的示例代码: function setCookie(cname, cvalue, exdays) { let d = new Date(); d.setTim…

    JavaScript 2023年6月11日
    00
  • javascript encodeURI和encodeURIComponent的比较

    讲解“javascript encodeURI和encodeURIComponent的比较”的完整攻略如下: javascript encodeURI和encodeURIComponent的比较 在JavaScript中,我们经常需要对URL进行编码,以便于在不同的环境下传输和处理数据。JavaScript提供了两种对URL进行编码的方法:encodeURI…

    JavaScript 2023年5月19日
    00
  • javascript学习笔记(一) 在html中使用javascript

    关于“javascript学习笔记(一) 在html中使用javascript”的完整攻略,可以分为以下几个部分: 一、为什么要在html中使用javascript 在传统的网页设计中,html主要负责网页的结构和内容,而样式和特效则需要使用css和jquery等技术实现。而javascript则是一门非常重要的网页编程语言,其功能强大,可以实现很多与用户交…

    JavaScript 2023年6月10日
    00
  • 使用JavaScript进行表单校验功能

    下面是“使用JavaScript进行表单校验功能”的完整攻略,包含以下几个步骤: 1. 界面设计 首先需要针对需要进行表单校验的页面进行合理的界面设计,包括表单中需要填写的各种项以及提示信息等等。需要根据实际情况来进行定制,保证界面简洁、明了,并且易于理解和操作。 2. 校验规则制定 制定合理的校验规则可以有效地保证表单填写的正确性。针对不同项的填写内容,可…

    JavaScript 2023年6月10日
    00
  • 一起来看看js对象和事件的学习笔记

    一起来看看js对象和事件的学习笔记 前言 本文将介绍JavaScript中对象和事件相关知识,并提供一些示例,帮助读者更好的理解和掌握这些知识。 什么是对象 在JavaScript中,对象指的是一组属性和方法的集合。它可以通过字面量或构造函数来创建。 下面是一个使用字面量创建对象的示例: const person = { name: ‘张三’, age: 1…

    JavaScript 2023年6月10日
    00
  • 如何利用JS实现时间轴动画效果

    下面是详细的“如何利用JS实现时间轴动画效果”的攻略。 1. 确定实现目标 在开始编写JS代码前,首先需要明确实现的时间轴动画效果,例如时间轴的布局样式、时间点的标记形式、动画效果等。明确实现目标有助于后续的编码过程,避免出现不必要的错误。 2. 构建HTML结构 在HTML中构建出时间轴的基本结构,例如采用<ul>和<li>元素表示…

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