前端必须掌握的JavaScript基础知识

本文整理了个人学习中常见的一些js面试题,以便查漏补缺。未经允许,禁止转载,持续更新中…

1. 说一下你了解的主要浏览器及其内核

浏览器内核.png

2. js中数据类型分为几种,都有哪些

  • 简单数据类型: numberstringBooleannullundefinedsymbol

  • 复杂数据类型: objectarrayfunction

    注意: 简单数据类型是没有属性和方法的且简单数据类型的值不可改变,保存复制的是值本身,储存在栈内存;引用数据保存与复制的是一个地址,改变其中一个另一个也会改变

3. 栈内存与堆内存的了解

栈内存堆内存.png

  • 栈内存 栈内存储存的都是一些比较简单的数据和堆内存的地址,举个例子

简单数据类型值.png

图中可以看出当改变了第一个num的值,num1的值不会因为num的值改变而改变,也再次印证了简单数据类型保存复制的是值本身

  • 堆内存 堆内存储存的是一些比较复杂的数据,数据储存在堆内存,数据的地址保存在栈内存里面,举个例子

复杂数据类型值.png

图中可以看出当改变了obj的name属性,obj1的name属性也跟着改变了,原因是 引用类型复制的是引用地址,obj和obj1指向的是堆内存中同一块空间,无论改变obj还是obj1 其实都是改变的同一个数据

3. typeof返回值有哪些

numberstringBooleanundefinedobjectfunction

  • typeof typeof 返回 string

  • typeof null 、 typeof 对象 、 typeof 数组 都返回object

4. 如何检测一个对象是不是数组

  • 第一种方法: instanceof 运算符用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性。

instanceOf检测数组.png

分析过程:

图中可知 arr是Array构造出来的实例,arr.__proto__属性指向了构造它的构造函数的原型对象Array.prototype,由此得知 arr对象的原型链上有Array构造函数的prototype属性。而arr.constructor指向了构造它的构造函数,因为arr实例没有constructor属性,就去原型链找,原型链上有constructor ,由此得知 arr.constructor === Array

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享