攻略前端面试官(一):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 ...
随机推荐
- python编译器的安装和pycharm的安装
python编译器的安装 进入官网https://www.python.org/,根据提示安装 安装python编译器 pychram安装 下载地址: https://www.jetbrains.co ...
- python之ORM(对象关系映射)
实现了数据模型与数据库的解耦,通过简单的配置就可以轻松更换数据库,而不需要更改代码.orm操作本质上会根据对接的数据库引擎,翻译成对应的sql语句.所有使用Django开发的项目无需关心程序底层使用的 ...
- MarkDown时序图
时序图 语法 ```sequence ``` 标题 title: 我是标题 对象 participant A participant B as b-alias 交互 sequence A->B: ...
- 高频Linux命令小结(新手向)
示例代码托管在:http://www.github.com/dashnowords/blogs 博客园地址:<大史住在大前端>原创博文目录 华为云社区地址:[你要的前端打怪升级指南] 近期 ...
- 搭建邮件服务器,使用Postfix与Dovecot收发电子邮件
小知识: 我们为什么要搭建邮件服务器呢?有时候我们处于一个局域网内,不能及时的分享各自的研究成果,迫切的需要一种能够借助于网络且建立在计算机之间的传输数据的方法.所以我们需要搭建邮件服务器,这样的话既 ...
- 泛微e-cology OA系统远程代码执行漏洞及其复现
泛微e-cology OA系统远程代码执行漏洞及其复现 2019年9月19日,泛微e-cology OA系统自带BeanShell组件被爆出存在远程代码执行漏洞.攻击者通过调用BeanShell组件中 ...
- 【XSY2495】余数
Input Output Input 3 4 Output 4 HINT 原式 =n*m-n除以i向下取整 用数论分块做就可以了 #include<bits/stdc++.h> #defi ...
- OpenCV图像处理以及人脸识别
OpenCV基础 OpenCV是一个开源的计算机视觉库.提供了很多图像处理常用的工具 批注:本文所有图片数据都在我的GitHub仓库 读取图片并显示 import numpy as np import ...
- CSP-S模拟57
这次的T1是来送温暖的. T2T3挺神的. T1. 不会 T2. 容斥,挺神的 T3. 考场上被卡常卡掉10分让我很难受.....(虽然说$O(n)$过$1e8$本来就不太行) 考场上:疯狂化简式子, ...
- ubuntu 12 install redis
ubuntu 12 install redis 今天开始写数据server部分,大家初步的方案是用redis+mysql 所以要安装,下面记录安装的基本过程,留做后续参考 unbuntu 12 已经支 ...