资讯专栏INFORMATION COLUMN

【js】基本类型和引用类型

Dogee / 2283人阅读

摘要:基本类型基本类型的比较就是值的比较访问是访问值本身不能定义方法和属性保存在栈内存中引用类型除了基本类型外,就是引用类型了。

基本类型

1、number
2、string
3、boolean
4、symbol
5、undefined
6、null
基本类型的比较就是值的比较;访问是访问值本身;不能定义方法和属性;保存在栈内存中

引用类型

JavaScript除了基本类型外,就是引用类型了。如Array、Function、Object、Date等等。
引用类型可以定义属性和方法;同时保存在栈内存和堆内存中;引用类型的比较是内存地址的比较。

为什么说引用类型同时保存在栈内存和堆内存中

let person = {name:"louis"}
//person保存在栈内存中,person就是这个引用对象的指针,通过这枚指针寻找到堆内存的地址 
//{name:"louis"} 保存在堆内存中

引用类型是如何比较的

let address = {details:"a"}
let one = address
let tow = address
one === tow //true
// 虽然one、tow是两枚不同的指针,但它们都同时指向了堆内存里的address的内容,所以它们是相等的

再来一个例子

let person = {name:"louis}
let man = {name:"louis"}
person === man //false
// person和man的内容明明相同,为什么又不相等是因为她们的内容虽然一样,但是是在堆内存里开辟了两个地方,所以它们指向的也是两个不同的地方。可见,引用类型的比较是内存地址的比较
函数参数是引用类型(对象)的时候会发生什么

还是一个例子

function test(person) {
  person.age = 26
  person = {
    name: "aaa",
    age: 30
  }

  return person
}
const p1 = {
  name: "bbb",
  age: 25
}
const p2 = test(p1)
p1 // {age:26,name:"bbb"}
p2 // {age:30,name:"aaa"}

函数传递参数时,实际上是传递指针的副本。
test(p1)实际上传递的就是p1的副本,这时指针仍然指向{name: "bbb",age: 25}
person.age = 26 这时修改的还是原来内存位置的内容,所以这时p1的age变成了26
当person = {} .. 相当于重新开辟了一块堆内存,赋值{name:"aaa",age:30},最后返回这个对象,而这个对象的指针就是p2

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/105343.html

相关文章

  • JS中,基本数据类型引用类型基本包装类型

    摘要:例子中,属于基本类型对象。基本数据类型和引用类型作方法入参时的差异通常,在函数调用时,如果入参为基本数据类型时,函数的参数将以值传递的方式传递。 前言:再次翻阅JS高程(第3版)过程中,看到了基本包装类型,趁热留下此文,对JS的数据类型做个较为深入的小结(2018-10-19)。 虽然JS与其他强类型语言不一样,声明中无需预设数据类型,但是JS也是有数据类型区分的。 基本数据类型(...

    Tychio 评论0 收藏0
  • 你还认为JS中万物皆对象?

    摘要:这也解答了我曾经的一个疑问同样的道理,在调用属性的瞬间,也是使用先来实例化一个对象,所以那一瞬间他们的构造函数以及原型对象是相同的,但也仅仅是那一瞬间。 经常在国内的各大网站博客上看到一句话,叫做JS中万物皆对象,那是否真是如此? 那么,我们先来捋一捋JS中的数据类型,JS中的数据类型有下面几种 Undefined Null Boolean Number String Symbol ...

    levinit 评论0 收藏0
  • js基本数据类型引用数据类型

    摘要:熟悉的同学都知道,它的数据类型一般分为基本数据类型和引用数据类型复杂数据类型。基本数据类型基本数据类型有种新增。动态的属性基本数据类型的值是没有办法添加属性和方法的。类型检测根据它的原型链来识别引用类型。 熟悉js的同学都知道,它的数据类型一般分为基本数据类型和引用数据类型(复杂数据类型)。那么他们之间到底有什么不同?从下面这个例子入手: var a = 1; ...

    kgbook 评论0 收藏0
  • [ JS 进阶 ] 基本类型 引用类型 简单赋值 对象引用

    摘要:也就是说基本类型在赋值操作后,两个变量是相互不受影响的。前面讲引用类型的时候提到,保存在变量中的是对象在堆内存中的地址,所以,与简单赋值不同,这个值的副本实际上是一个指针,而这个指针指向存储在堆内存的一个对象。 ECMAScirpt 变量有两种不同的数据类型:基本类型,引用类型。也有其他的叫法,比如原始类型和对象类型,拥有方法的类型和不能拥有方法的类型,还可以分为可变类型和不可变类型,...

    余学文 评论0 收藏0
  • JS从入门到放弃-基本类型引用类型

    摘要:从入门到放弃基本类型和引用类型有七种数据类型而的变量根据指向数据类型的不同也分为两种类型一种基本类型一种引用类型基本类型基本类型包括这五种但凡变量指向这五种数据类型的都称之为基本类型假设有以上变量那么他们在内存中栈区的存储结构大概是这样子 JS从入门到放弃-基本类型和引用类型 JS有number,string,null,undefined,boolean,array,object七种数...

    walterrwu 评论0 收藏0
  • js基本类型引用类型、包装类型

    摘要:每当读取这个基本类型时,后台会创建一个对应的基本包装类型的对象。类型判断主要是用来判断基本数据类型返回类型新增所以只能用来判断基本数据类型。引用类型基本包装类型都会返回。 最近重温JS高程设计以及与朋友的讨论。决定趁热打铁记录JS的各种类型,并做下深入总结。 js的几种类型 基本类型:Boolean、String、Number、Null、Undefined 引用类型: 2.1 O...

    liangzai_cool 评论0 收藏0

发表评论

0条评论

Dogee

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<