JavaScript的数据类型

数据类型的概念

数据类型即这条数据数据属哪个类型?而这些类型在编程语言中往往指的是:数字类型,字符串类型,布尔类型或对象等,当然不止这么简单,但我们可以这么简单的去理解!

JS的数据类型一共有8中:

其中,前7种类型为基础类型,这里需要强调的是undefinednull两种类型,推荐大家读下大佬的这篇《undefined与null的区别》文章,不做赘述!

而最后一种(Object)引用类型,是需要我们重点关注的对象,因为它在日常开发过程中使用的最为频繁,也是技术细节最多数据类型!

引用类型(Object)分为图上几种常见类型:

  1. Array - 数组对象
  2. RegExp - 正则对象
  3. Date - 日期对象
  4. Math - 数学函数
  5. Function - 函数对象

其中不同的数据类型在初始化后都会放在不同的内存中:

  1. 基础类型存储在栈内存,被引用或拷贝时,会创建一个完全相等的变量;
  2. 引用类型存储在堆内存,存储的是地址,多个引用指向同一个地址,这里会涉及一个“共享”的概念。

至于栈内存和堆内存的概念,不明白的同学可以搜索了解下,或者看下边这篇!

推荐阅读下大佬的这篇 《JS中的栈内存堆内存》文章,有详细解释!

关于引用类型的核心“共享”概念,我们通过以下两段代码来理解!

片段一:

let a = {
  name: 'crmeb',
  age: 18
}
let b = a;
console.log(a.name);  //第一个console
b.name = 'son';
console.log(a.name);  //第二个console
console.log(b.name);  //第三个console

运行这个代码片段可以看出,第一个 console 打印 a.name 的值是 crmeb,这是毋庸置疑的,但是,当执行完b.name='ceshi之后,你会发现a和b的属性name都是'ceshi',第二个a.name和第三个b.name打印的结果是一样的,这里就体现了引用类型的“共享”特性,即这两个值的内存地址是一样的,所以他们的值是共享的,一个改变,另一个也会跟着改变!

片段二:

let a = {
  name: 'Julia',
  age: 20
}

function change(o) {
  o.age = 24;
  o = {
    name: 'Kath',
    age: 30
  }
  return o;
}

let b = change(a);     
console.log(b.age);    // 第一个console
console.log(a.age);    // 第二个console

console.log(a)
console.log(b)

运行以上代码可以看出,第一个console打印b.age的值为30,第二个 console 的返回a.age的结果是 24,而最后分别打印了a和b的值,发现a最后返回的结果竟然是{name: “Julia”, age: 24}。

这里就是考验大家对栈内存堆内存的理解了,函数中传递进来的参数o,在第七行return返回的时候对应了一个独立的内存地址,因此上b返回的就是参数o的值!

预告: 下一篇分享Js中数据类型的三种检测方法!

  • 第一种判断方法:typeof
  • 第二种判断方法:instanceof
  • 第三种判断方法:Object.prototype.toString

欢迎大家点赞关注交流,给大家推荐个我们开源的优秀的开源公众号/小程序商城系统,欢迎Star,使用交流!
传送门:http://github.crmeb.net/u/xingfu

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值