yfisaboy 2019-12-09
本文部分内容来源:https://mp.weixin.qq.com/s/A8YyeM2N2MP23gEMzVLesw,https://www.cnblogs.com/cider/p/11875832.html
知识体系的自检清单:
一、JavaScript基础
1. JavaScript
规定了几种语言类型
七种类型:boolean string number undefined null symbol object
其中可以分为两大类:基本数据类型(Boolean String Number Undefined Null Symbol)和引用类型(Object:Object Array Function RegExp Date null)
注意: null 是值类型,但是是一个空的对象引用,typeof null => object
symbol是ES6引入的一种新的原始数据,表示独一无二且不可改变的值。通过 Symbol 函数调用生成,由于生成的 symbol 值为原始类型,所以 Symbol 函数不能使用 new 调用,更多了解https://zhuanlan.zhihu.com/p/22652486
值类型不是由内置函数new出来的,尽管他们有对应的引用类型
值类型复制的是值,直接保存在栈中,引用类型复制的是栈里面指向堆中对象的地址,真正的对象保存在堆内存中
2. JavaScript
对象的底层数据结构是什么
数据在内存中的存储结构,也就是物理结构,分为两种:顺序存储结构和链式存储结构。
JavaScript数据结构:es5自带的:array、object;es6自带的:set map、weakset weakmap (强引用、弱引用,Set 和 Map 数据结构);es未有的:dictionary list linkedlist doublelinkedlist quene hash stack。在JavaScript中不管多么复杂的数据和代码,都可以组织成object形式的对象
V8里面所有的数据类型的根父类都是Object,Object派生HeapObject,提供存储基本功能,往下的JSReceiver用于原型查找,再往下的JSObject就是JS里面的Object,Array/Function/Date等继承于JSObject。FixedArray是实际存储数据的地方。再谈js对象数据结构底层实现原理-object array map set
3. Symbol
类型在实际开发中的应用、可手动实现一个简单的 Symbol
https://my.oschina.net/u/2903254/blog/818796
4. JavaScript
中的变量在内存中的具体存储形式
一篇比较完整有深度的堆栈理解文章:https://www.jianshu.com/p/52b5a1879aa1
运行时内存中有堆栈两个用于存储变量的地方:
栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。操作方式类似于数据结构中的栈。
堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式类似于链表。
在Javascript中,栈中可以存放值类型、引用类型对象的地址、执行上下文(最底层永远是全局上下文)等等,堆中则存放引用类型对象。
5.基本类型对应的内置对象,以及他们之间的装箱拆箱操作
基本类型的内置对象有3个:Boolean、String、Number。每当读取一个基本类型值的时候,后台会创建一个对应的基本包装类型的对象,从而能够调用一些方法来操作这些基本类型。每个包装类型都映射到同名的基本类型。
6.理解值类型和引用类型
7. null
和 undefined
的区别
null是一个空的对象引用,undefined是值类型初始化时未赋值
8.至少可以说出三种判断 JavaScript
数据类型的方式,以及他们的优缺点,如何准确的判断数组类型
9.可能发生隐式类型转换的场景以及转换原则,应如何避免或巧妙应用
10.出现小数精度丢失的原因, JavaScript
可以存储的最大数字、最大安全数字, JavaScript
处理大数字的方法、避免精度丢失的方法