前端工程师吃饭的家伙

yfisaboy 2019-12-09

本文部分内容来源:https://mp.weixin.qq.com/s/A8YyeM2N2MP23gEMzVLeswhttps://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处理大数字的方法、避免精度丢失的方法

相关推荐