攻略前端面试官(一):JS的数据类型和内存机制浅析
本文在个人主页同步更新~
背就完事了
介绍:一些知识点相关的面试题和答案
使用姿势:看答案前先尝试回答,看完后把答案收起来检验成果~
面试官: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变量时,会先创建相应的对象存放在堆内存中,再将其引用地址赋值给变量。
由此,这道常见面试题的答案显而易见
var a = { test : 10 }
var b = a
a.test = 20
此时b.test=?
关于null,{}和undefined的对比
| 描述 | 数据类型 | 强转Boolean值 | |
|---|---|---|---|
| null | 指针,指向地址没有对象 | Object | false |
| {} | 指针,指向空对象 | Object | true |
| undefined | 值,未定义 | Undefined | false |
关于浅拷贝和深拷贝的具体操作
日常大部分的拷贝动作都属于浅拷贝,包括直接赋值(=), 扩展运算符(...), 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等操作只是第一层用新建的对象包裹住,子属性对象的引用地址还是和原来一致。
Kane -- 一切都是命运石之门的选择
攻略前端面试官(一):JS的数据类型和内存机制浅析的更多相关文章
- 攻略前端面试官(三):JS的原型和原型链
本文在个人主页同步更新~ 背就完事了 介绍:一些知识点相关的面试题和答案 使用姿势:看答案前先尝试回答,看完后把答案收起来检验成果~ 面试官:什么是构造函数 答:构造函数的本质是一个普通函数,他的特点 ...
- 前端面试之JavaScript的基本数据类型!
前端面试之JavaScript的基本数据类型! JS的基本数据类型 数字 字符串 布尔值 JavaScript中有两个特殊的原始值: null (空) 和undefined (未定义), , 它们不是 ...
- 面试官:怎么做JDK8的内存调优?
面试官:怎么做JDK8的内存调优? 看着面试官真诚的眼神,心中暗想看起来年纪轻轻却提出如此直击灵魂的问题.擦了擦额头上汗,我稍微调整了一下紧张的情绪,对面试官说: 在内存调优之前,需要先了解JDK8的 ...
- 前端面试:谈谈 JS 垃圾回收机制
摘要: 不是每个人都回答的出来... 最近看到一些面试的回顾,不少有被面试官问到谈谈JS 垃圾回收机制,说实话,面试官会问这个问题,说明他最近看到一些关于 JS 垃圾回收机制的相关的文章,为了 B 格 ...
- 阿里巴巴Web前端面试的一道JS题目,求解答!!!
题目大概是这种: function outer(){ return inner; var inner = "a"; function inner(){}; inner = 9; } ...
- 一张图,让你和面试官聊一个小时的“Java内存模型”
如果面试官问你:你了解 Java 内存模型吗? 你就可以使用这张图,按照这张图中的顺序和面试官开聊,正常情况下,聊一个小时是差不多的,这个时候,对你的处境是非常有益的,因为面试官的时间不多了.
- 面试官问我redis数据类型,我回答了8种
面试官:小明呀,redis 有几种数据结构呀? 小明:8 种 面试官:那你说一下分别是什么? 小明:raw,int,ht,zipmap,linkedlist,ziplist,intset,skipli ...
- web前端面试官挖的那些坑(js)
题目1: function Foo() { getName = function () { alert (1); }; return this; } Foo.getName = function () ...
- 前端面试送命题-JS三座大山
前言 本篇文章比较适合3年以上的前端工作者,JS三座大山分别指:原型与原型链,作用域及闭包,异步和单线程. 原型与原型链 说到原型,就不得不提一下构造函数,首先我们看下面一个简单的例子: functi ...
随机推荐
- char 、signed char、unsigned char
看如下代码: char c = -1; signed char sc = -1; unsigned char uc = -1; printf("c=%d, sc=%d, uc=%d, cx= ...
- springboot---发送邮件
1.pom.xml配置 <dependencies> <dependency> <groupId>org.springframework.boot</grou ...
- 安装Java环境
一.下载JDK https://www.oracle.com/technetwork/java/javase/downloads/index.html 二.exe安装 默认路径 C:\Program ...
- SpringBoot之集成MyBatis
引入工程依赖包 <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...
- Java基本数据类型的传值
传递值: 说明:标题其实说法是错误的.Java中只有值传递,没有引用传递. ... ... //定义了一个改变参数值的函数 public static void changeValue(int x) ...
- 我把数表A了
真kx 之前打一棵沙雕主席树,复杂度和正解一毛一样,结果常数爆炸了! 我一直天真的认为卡卡常这题就能AC,然后卡常卡到死也没A掉,极限数据大概跑了1.1s 今天终于打正解了,离线处理,可以用常数更小的 ...
- 如何在Vue项目中使用Typescript
0.前言 本快速入门指南将会教你如何在Vue项目中使用TypeScript进行开发.本指南非常灵活,它可以将TypeScript集成到现有的Vue项目中任何一个阶段. 1.初始化项目 首先,创建一个新 ...
- [转载]2.6 UiPath循环嵌套的介绍和使用
一.循环嵌套的介绍 一个循环体内又包含另一个完整的循环结构,就称之为循环嵌套.内嵌的循环中还可以嵌套循环,这就是多层循环,也叫做多重循环. 二.在UiPath中结合使用循环嵌套生成99乘法表 1.打开 ...
- ORACLE存储过程的创建和执行的简单示例和一些注意点
此示例的主要目的主要是为了了解在PL/SQL环境下怎么创建和执行存储过程. 存储过程所涉及的DataTable: 第一步:创建游标变量 游标是ORACLE系统在内存中开辟的一个工作区,主要用来存储SE ...
- php判断是不是https的方法
php判断是不是https的方法<pre> public function is_https() { if (!empty($_SERVER['HTTPS']) && st ...