本文整理了个人学习中常见的一些js面试题,以便查漏补缺。未经允许,禁止转载,持续更新中…
1. 说一下你了解的主要浏览器及其内核
2. js中数据类型分为几种,都有哪些
-
简单数据类型:
number
、string
、Boolean
、null
、undefined
、symbol
-
复杂数据类型:
object
、array
、function
注意: 简单数据类型是没有属性和方法的且简单数据类型的值不可改变,保存复制的是值本身,储存在栈内存;引用数据保存与复制的是一个地址,改变其中一个另一个也会改变
3. 栈内存与堆内存的了解
- 栈内存 栈内存储存的都是一些比较简单的数据和堆内存的地址,举个例子
图中可以看出当改变了第一个num的值,num1的值不会因为num的值改变而改变,也再次印证了简单数据类型保存复制的是值本身
-
堆内存 堆内存储存的是一些比较复杂的数据,数据储存在堆内存,数据的地址保存在栈内存里面,举个例子
图中可以看出当改变了obj的name属性,obj1的name属性也跟着改变了,原因是 引用类型复制的是引用地址,obj和obj1指向的是堆内存中同一块空间,无论改变obj还是obj1 其实都是改变的同一个数据
3. typeof返回值有哪些
number
、 string
、Boolean
、 undefined
、 object
、 function
-
typeof typeof 返回 string
-
typeof null 、 typeof 对象 、 typeof 数组 都返回object
4. 如何检测一个对象是不是数组
- 第一种方法:
instanceof
运算符用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性。
分析过程:
图中可知 arr是Array构造出来的实例,arr.__proto__
属性指向了构造它的构造函数的原型对象Array.prototype
,由此得知 arr对象的原型链上有Array
构造函数的prototype属性。而arr.constructor
指向了构造它的构造函数,因为arr实例没有constructor
属性,就去原型链找,原型链上有constructor
,由此得知 arr.constructor === Array