JavaScript基础 数据类型

前言

今天到厂里面试问道一个问题答不上来,记录一下理解后的结果,先是问typeof会返回哪些数据类型,接着继续问基本数据类型有哪些,继续问es6新增的有哪些.

然后难点来了,怎么区分基本数据类型和引用数据类型

数据类型

typeof返回哪些数据类型

number string  boolean undefined object function symbol bigint (8)

基本数据类型有哪些

es5: number string Boolean undefined null (5)
es6新增:symbol BigInt(2)

引用数据类型有哪些

object

数据类型区别

基本数据类型和引用数据类型的区别

  1. 首先这里涉及两个内存:栈内存,堆内存
  2. 栈内存是有序的,堆内存是无序的
  3. 基础数据类型的数据 (原始值)会直接保存在栈内存里面
  4. 引用数据类型的数据(引用值)会保存在堆内存里面,然后把引用值存在栈内存

在这里插入图片描述
因此如果添加let e = d,栈里面会多一个e的变量名,e的值和d的值一样,指向一样的地址;

所以这时如果给e.a赋值e.a=1,那么0x1001的变量会发生改变,又因为d指向一个地址,所以他的e.a也会变成1

怎么区分基本数据类型和引用数据类型

在读取某个原始值的时候,javaScript后台会为他们创建对应原始包装类型对象(Boolean,String,Number)

以读模式访问变量的时候,会执行以下三步:

  1. 创建一个原始值类型的实例(如new String())
  2. 调用实例中的方法
  3. 销毁对象
/*以string为例*/
let str = "1,2" ;
let str2 = str.split(",") ;

/*后台处理实际可以理解为下面这个操作*/
let str = new String("1,2") ;
let str2 = str.split(",") ;
str = null ;

所以怎么区分原始值还是应用值(以string类型为例)

1 	let str = "1,2" ;
2 	str.color = "red" ; //不报错
3 	console.log( str.color ) ;// 打印出来undefined
/*  第2行代码,以读模式访问变量->创建 String("1,2")对象,给color属性赋值;然后销毁对象*/

/*  
 *	第3行代码,以读模式访问变量->创建 String("1,2")对象,读取color属性, 由于这是新对象,
 *	第二行的对象已经被销毁,所以color属性是新对象里面的color,是undefined
*/

综上:原始值没有属性,引用值有属性;由此可以分别添加一个属性并初始化值,判断是否undefined来判断区分出来。

总结

如果有什么问题,可以私聊及时指出

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值