没有合适的资源?快使用搜索试试~ 我知道了~
12-栈空间和堆空间:数据是如何存储的?_For_vip_user_0011
需积分: 0 0 下载量 95 浏览量
2022-08-04
13:04:14
上传
评论
收藏 1.16MB PDF 举报
温馨提示
试读
17页
JavaScript是什么类型的语JavaScript是什么类型的语每种编程语都具有内建的数据类型,但它们的数据类型常有不同之处,使式也很不样,如C语在定义变量
资源详情
资源评论
资源推荐
12-栈空间和堆空间:数据是如何存储的?12-栈空间和堆空间:数据是如何存储的?
对于前端开发者来说,JavaScript的内存机制是⼀个不被经常提及的概念,因此很容易被忽视。特别是⼀些
⾮计算机专业的同学,对内存机制可能没有⾮常清晰的认识,甚⾄有些同学根本就不知道JavaScript的内存
机制是什么。
但是如果你想成为⾏业专家,并打造⾼性能前端应⽤,那么你就必须要搞清楚JavaScript的内存机制JavaScript的内存机制了。
其实,要搞清楚JavaScript的内存机制并不是⼀件很困难的事,在接下来的三篇⽂章(数据在内存中的存
放、JavaScript处理垃圾回收以及V8执⾏代码)中,我们将通过内存机制的介绍,循序渐进带你⾛进
JavaScript内存的世界。
今天我们讲述第⼀部分的内容⸺JavaScript中的数据是如何存储在内存中的。虽然JavaScript并不需要直
接去管理内存,但是在实际项⽬中为了能避开⼀些不必要的坑,你还是需要了解数据在内存中的存储⽅式
的。
让⼈疑惑的代码让⼈疑惑的代码
⾸先,我们先看下⾯这两段代码:
若执⾏上述这两段代码,你知道它们输出的结果是什么吗?下⾯我们就来⼀个⼀个分析下。
执⾏第⼀段代码,打印出来a的值是2,b的值是1,这没什么难以理解的。
接着,再执⾏第⼆段代码,你会发现,仅仅改变了a中name的属性值,但是最终a和b打印出来的值都是
{name:"极客邦"}。这就和我们预期的不⼀致了,因为我们想改变的仅仅是a的内容,但b的内容也同时被
改变了。
functionfoo(){
vara=1
varb=a
a=2
console.log(a)
console.log(b)
}
foo()
functionfoo(){
vara={name:"极客时间"}
varb=a
a.name="极客邦"
console.log(a)
console.log(b)
}
foo()
要彻底弄清楚这个问题,我们就得先从“JavaScript是什么类型的语⾔”讲起。
JavaScript是什么类型的语⾔JavaScript是什么类型的语⾔
每种编程语⾔都具有内建的数据类型,但它们的数据类型常有不同之处,使⽤⽅式也很不⼀样,⽐如C语⾔
在定义变量之前,就需要确定变量的类型,你可以看下⾯这段C代码:
上述代码声明变量的特点是:在声明变量之前需要先定义变量类型。我们把这种在使⽤之前就需要确认其变我们把这种在使⽤之前就需要确认其变
量数据类型的称为静态语⾔量数据类型的称为静态语⾔。
相反地,我们把在运⾏过程中需要检查数据类型的语⾔称为动态语⾔相反地,我们把在运⾏过程中需要检查数据类型的语⾔称为动态语⾔。⽐如我们所讲的JavaScript就是动态
语⾔,因为在声明变量之前并不需要确认其数据类型。
虽然C语⾔是静态,但是在C语⾔中,我们可以把其他类型数据赋予给⼀个声明好的变量,如:
前⾯代码中,我们把int型的变量a赋值给了bool型的变量c,这段代码也是可以编译执⾏的,因为在赋值过
程中,C编译器会把int型的变量悄悄转换为bool型的变量,我们通常把这种偷偷转换的操作称为隐式类型转隐式类型转
换换。⽽⽀持隐式类型转换的语⾔称为弱类型语⾔,不⽀持隐式类型转换的语⾔称为强类型语⾔⽀持隐式类型转换的语⾔称为弱类型语⾔,不⽀持隐式类型转换的语⾔称为强类型语⾔。在这点上,
C和JavaScript都是弱类型语⾔。
对于各种语⾔的类型,你可以参考下图:
intmain()
{
inta=1;
char*b="极客时间";
boolc=true;
return0;
}
c=a
语⾔类型图
JavaScript的数据类型JavaScript的数据类型
现在我们知道了,JavaScript是⼀种弱类型的、动态的语⾔JavaScript是⼀种弱类型的、动态的语⾔。那这些特点意味着什么呢?
那么接下来,我们再来看看JavaScript的数据类型,你可以看下⾯这段代码:
从上述代码中你可以看出,我们声明了⼀个bar变量,然后可以使⽤各种类型的数据值赋予给该变量。
在JavaScript中,如果你想要查看⼀个变量到底是什么类型,可以使⽤“typeof”运算符。具体使⽤⽅式如
下所⽰:
弱类型弱类型,意味着你不需要告诉JavaScript引擎这个或那个变量是什么数据类型,JavaScript引擎在运⾏代
码的时候⾃⼰会计算出来。
动态动态,意味着你可以使⽤同⼀个变量保存不同类型的数据。
varbar
bar=12
bar="极客时间"
bar=true
bar=null
bar={name:"极客时间"}
剩余16页未读,继续阅读
月小烟
- 粉丝: 27
- 资源: 296
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0