来自《一名【合格】前端工程师的自检清单》学习之路

147 阅读3分钟

背景

一直在看网上的技术文章,但是真正能静下来学习的时间少之又少,文章太长看了前面忘了后面,文章太难看到一半就想放弃了。 但还是下个决心去学习消化一些东西,并记录下来,刷到好几遍这个一名【合格】前端工程师的自检清单,目前的想法是能够弄懂里面的问题,并记录下来,希望大家可以一同监督进步。

一、JavaScript基础

老师常说“基础不牢,地动山摇。”

变量和类型

  1. JavaScript规定了几种语言类型

    基本类型有 string、number、Boolean、Null、undefined、symbol 引用类型有 Object(包括Object/Array/RegExp/Date/null)

拓展

  • typeof有几种结果?

    答:string、number、boolean、undefined、object、function、symbol

    typeof null // object (js中的数据在底层是以二进制存储,如果前三位为0,那么就会判定为object,而null的所有都为0)
    
  • 基本数据类型和引用类型的存储有何区别?

    答: 基本数据类型(按值访问),存储的位置是在栈中,而引用类型保存在堆中,只是将引用类型的内存地址的指针存在栈中,当我们想要访问引用类型的值的时候,需要先从栈中获得对象的地址指针,然后,在通过地址指针找到堆中的所需要的数据。

    var age = 18;
    var newAge = age;
    age = 20;
    console.log(newAge); // 18 ,因为18是number属于基本数据类型,声明新的变量newAge时,会在栈中给它分配一块内存
    //因为age 和 newAge 是两个不同的地址,所以不会相互干扰. 基本数据类型的赋值是 "值"传递
    
    var obj = {'name': 'chh'}; // 变量obj中存放的是 {'name': 'chh'}在内存中的地址,而不是真正的值.
    var newObj = obj; 
    obj.name = 'klh';
    console.log(newObj.name); // klh, 因为赋值给newObj也是地址,obj 和 newObj
    //指向的是同一块内存地址,所以当obj.name修改之后, newObj.name也会被修改. 这也是我们常说的 "址"传递
    
  • 堆和栈?

    堆: 堆是动态分配内存,内存大小不一,也不会自动释放
    栈: 栈是自动分配相对固定大小的内存空间,并由系统自动释放。栈先进后出(LIFO,last in first out),队列后进先出(FIFO,first in first out)。

  1. JavaScript对象的底层数据结构是什么?

    答: 其实我不太这个考点在哪里,欢迎知晓的人告知。 假使是问的js的object和array对象底层数据结构是什么?

    • array是顺序存储结构
    • object是链式存储结构

拓展

  • 数据在内存中的存储结构,也就是物理结构,分为两种:顺序存储结构和链式存储结构。

    顺序存储结构:是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的。
    链式存储结构:是把数据元素存放在内存中的任意存储单元里,也就是可以把数据存放在内存的各个位置。这些数据在内存中的地址可以是连续的,也可以是不连续的。

  1. 待更新

后记

学而不思则罔,思而不学则殆

本文章持续更新,希望大家共同监督,共同进步。(认知有限,如果错误,欢迎大家斧正)

参考资料