背景
一直在看网上的技术文章,但是真正能静下来学习的时间少之又少,文章太长看了前面忘了后面,文章太难看到一半就想放弃了。 但还是下个决心去学习消化一些东西,并记录下来,刷到好几遍这个一名【合格】前端工程师的自检清单,目前的想法是能够弄懂里面的问题,并记录下来,希望大家可以一同监督进步。
一、JavaScript基础
老师常说“基础不牢,地动山摇。”
变量和类型
-
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)。
-
JavaScript对象的底层数据结构是什么?答: 其实我不太这个考点在哪里,欢迎知晓的人告知。 假使是问的js的object和array对象底层数据结构是什么?
- array是顺序存储结构
- object是链式存储结构
拓展
-
数据在内存中的存储结构,也就是物理结构,分为两种:顺序存储结构和链式存储结构。
顺序存储结构:是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的。
链式存储结构:是把数据元素存放在内存中的任意存储单元里,也就是可以把数据存放在内存的各个位置。这些数据在内存中的地址可以是连续的,也可以是不连续的。
- 待更新
后记
学而不思则罔,思而不学则殆
本文章持续更新,希望大家共同监督,共同进步。(认知有限,如果错误,欢迎大家斧正)