集团主站
欢迎来到成都达内官方网站!达内—美国上市公司 亿元级外企IT培训企业!
成都it培训哪家好
成都it培训哪家好
全国服务监督电话:15023458194  |   联系客服   |
当前位置:主页 > 培训课程 > web前端 >

成都去哪儿学前端:JS的数据类型和内存机制浅析

发布者: 成都达内     浏览次数:     发布时间:2019-12-03 15:21:38

介绍:成都去哪儿学前端?达内分享一些知识点相关的面试题和答案;使用姿势:看答案前先尝试回答,看完后把答案收起来检验成果~...

  介绍:成都去哪儿学前端?达内分享一些知识点相关的面试题和答案

  使用姿势:看答案前先尝试回答,看完后把答案收起来检验成果~

  问:JS有哪些数据类型

  答:JS有七种数据类型,分别是Number、String、Boolean、Null、Undefined、Symbol、Object。其中Object是引用数据类型,其他都是值类型(基本数据类型)。引用数据类型又细分为Function, Array和Object类型。

  问:如何理解值类型和引用类型

  答:值类型占用空间固定,保存在栈里面,操作的是值本身;引用类型占用空间不固定,保存在堆中,操作的是指向对象的一个指针。

  问:如何理解堆(heap)栈(stack)

  答:栈一般存放变量的值,堆一般存放复杂对象;栈的结构是先进先出,内存空间由系统自动分配和释放,堆的结构是先进后出,内存空间为动态分配,不主动释放的话,可能会由垃圾回收机制自动回收。

  问:Null和Undefined有什么区别

  答:null是一个对象指针,但没有指向任何对象,通过typeof(null)得到的是 Object类型;undefined则是一个空值,通过typeof(undefined)得到的是 Undefined。

  问:什么是浅拷贝和深拷贝

  答:浅拷贝是只复制指向对象的指针,对新旧对象进行操作都会互相影响;而深拷贝则是创建一个新的对象,将原来的值一个个复制过来,与原对象不在同一内存地址。

  问:如何理解Symbol类型,使用场景是什么

  答:Symbol的特点就是Symbol类型只能通过Symbol()这个方法返回得到,且Symbol类型的值是绝对唯一的。使用场景是作为对象属性的key值。

  介绍:总结性的图表或笔试题目和解析,让知识点更容易懂

  关于值类型,引用类型和内存栈和堆的关系

  如下图所示,a,b变量是值类型,c,d变量是引用类型。

  在声明c,d变量时,会先创建相应的对象存放在堆内存中,再将其引用地址赋值给变量。

  成都去哪儿学前端:JS的数据类型和内存机制浅析

  由此,这道常见面试题的答案显而易见

  var a = { test : 10 }

  var b = a

  a.test = 20

  此时b.test=?

  关于null,{}和undefined的对比

  成都去哪儿学前端:JS的数据类型和内存机制浅析

  关于浅拷贝和深拷贝的具体操作

  日常大部分的拷贝动作都属于浅拷贝,包括直接赋值(=), 扩展运算符(...), Array的concat操作, Object的assign操作。

  真正的深拷贝方法可以自己进行封装,循环判断每一个子项是否为引用类型,再进行复制。

  也可以通过JSON.parse(JSON.stringfy(object))进行深拷贝

  // 日常所见的浅拷贝操作

  var a = { class: 1, teacher: { name : 'abc' }}

  var b = a

  var c = {...a}

  var d = Object.assign({}, a)

  var e = JSON.parse(JSON.stringify(a))

  a.class = 2

  a.teacher.name = 'bcd'

  console.log(a) // 打印结果:{ class: 2, teacher: { name : 'bcd' }}

  console.log(b) // 打印结果:{ class: 2, teacher: { name : 'bcd' }}

  console.log(c) // 打印结果:{ class: 1, teacher: { name : 'bcd' }}

  console.log(d) // 打印结果:{ class: 1, teacher: { name : 'bcd' }}

  console.log(e) // 打印结果:{ class: 1, teacher: { name : 'abc' }}

  通过以上代码可以看出..., Object.assign, concat等操作只是第一层用新建的对象包裹住,子属性对象的引用地址还是和原来一致。

(责任编辑:范老师)
最新开班
  • 成都Java培训班
    免费试听名额发放中...
  • 成都C++培训班
    免费试听名额发放中...
  • 成都PHP培训班
    免费试听名额发放中...
  • 成都网络工程培训班
    免费试听名额发放中...
  • 成都Unity3D培训班
    免费试听名额发放中...
  • 成都大数据培训班
    免费试听名额发放中...
  • 成都uid培训班
    免费试听名额发放中...
  • 成都会计培训班
    免费试听名额发放中...
  • 成都Python培训班
    免费试听名额发放中...
  • 成都嵌入式培训班
    免费试听名额发放中...
  • 成都web培训班
    免费试听名额发放中...
  • 成都软件测试培训班
    免费试听名额发放中...
在线留言
提交

校区地址:成都市锦江区东大街紫东楼端35号明宇金融广场19楼1906室

联系电话:15023458194

公交路线:芷泉街(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:东门大桥站(地铁2号线)

校区地址:成都市高新区奥克斯广场蜀锦路209号一楼商铺

联系电话:15023458194

公交路线:益州大道锦城大道口(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:孵化园(地铁1号线)

校区地址:成都锦江区东大街芷泉街229号东方广场C座3楼303

联系电话:15023458194

公交路线:芷泉街(188路;115路;515路;236路;505路;501路;84路 ) 地铁路线:东门大桥站(地铁2号线)

校区地址:成都市武侯区佳灵路3号红牌楼广场2号写字楼11楼1115号

联系电话:15023458194

公交路线:红牌楼东(11路;92路;100路;111路;139路;g28路;快速公交K1/K2) 地铁路线:红牌楼站(地铁3号线)

校区地址:成都市锦江区红星路二段70号四川日报大厦502-2

联系电话:15023458194

公交路线:市二医院站(6路;49路;102路;5路;37路;g92路;) 地铁路线:地铁市二医院(地铁3号线)

校区地址:成都市锦江区东大街芷泉段229号东方广场C座16层

联系电话:15023458194

公交路线:芷泉街(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:东门大桥站(地铁2号线)

校区地址:四川省成都市武侯区高新科技孵化园9号园区E座7楼

联系电话:15023458194

公交路线:益州大道锦城大道口(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:孵化园(地铁1号线)

校区地址:成都市高新区奥克斯广场B座1708

联系电话:15023458194

公交路线:益州大道锦城大道口(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:孵化园(地铁1号线)

了解达内动态
关注成都达内教育公众号

首页 | 关于达内 | 课程中心 | 专家师资 | 视频教程 | 学员空间 | 校企合作 | 新闻资讯 | 就业指导 | 网站地图

2016-2025 达内时代科技集团有限公司 版权所有 京ICP证8000853号-56