js面试题
一、判断 js 类型的方式1. typeof2. instanceof3. Object.prototype.toString.call()4. Array.isArray()二、ES5 和 ES6 分别几种方式声明变量三、闭包的概念?优缺点?优点:缺点:四、数组去重的方法1.ES6 的 Set2.reduce()3.filter()五、javascript 的垃圾回收机制讲一下
一、判断 js 类型的方式
1. typeof
可以判断出'string','number','boolean','undefined','symbol'
但判断 typeof(null) 时值为 'object'; 判断数组和对象时值均为 'object'
2. instanceof
原理是 构造函数的 prototype 属性是否出现在对象的原型链中的任何位置
1function A() {}
2let a = new A();
3a instanceof A //true,因为 Object.getPrototypeOf(a) === A.prototype;
3. Object.prototype.toString.call()
常用于判断浏览器内置对象,对于所有基本的数据类型都能进行判断,即使是 null 和 undefined
4. Array.isArray()
用于判断是否为数组
二、ES5 和 ES6 分别几种方式声明变量
ES5 有俩种:var 和 function
ES6 有六种:增加四种,let、const、class 和 import注意:let、const、class声明的全局变量再也不会和全局对象的属性挂钩
三、闭包的概念?优缺点?
闭包的概念:闭包就是能读取其他函数内部变量的函数。
优点:
避免全局变量的污染
希望一个变量长期存储在内存中(缓存变量)
缺点:
内存泄露(消耗)
常驻内存,增加内存使用量
四、数组去重的方法
1.ES6 的 Set
1let arr = [1,1,2,3,4,5,5,6]
2let arr2 = [...new Set(arr)]
2.reduce()
1let arr = [1,1,2,3,4,5,5,6]
2let arr2 = arr.reduce(function(ar,cur) {
3 if(!ar.includes(cur)) {
4 ar.push(cur)
5 }
6
7 return ar
8},[])
3.filter()
1// 这种方法会有一个问题:[1,'1']会被当做相同元素,最终输入[1]
2let arr = [1,1,2,3,4,5,5,6]
3let arr2 = arr.filter(function(item,index) {
4 // indexOf() 方法可返回某个指定的 字符串值 在字符串中首次出现的位置
5 return arr.indexOf(item) === index
6})
五、javascript 的垃圾回收机制讲一下
定义:指一块被分配的内存既不能使用,又不能回收,直到浏览器进程结束。
像 C 这样的编程语言,具有低级内存管理原语,如 malloc()和 free()。开发人员使用这些原语显式地对操作系统的内存进行分配和释放。
而 JavaScript 在创建对象(对象、字符串等)时会为它们分配内存,不再使用对时会“自动”释放内存,这个过程称为垃圾收集。
内存生命周期中的每一个阶段:
分配内存 — 内存是由操作系统分配的,它允许您的程序使用它。在低级语言(例如 C 语言)中,这是一个开发人员需要自己处理的显式执行的操作。然而,在高级语言中,系统会自动为你分配内在。
使用内存 — 这是程序实际使用之前分配的内存,在代码中使用分配的变量时,就会发生读和写操作。
释放内存 — 释放所有不再使用的内存,使之成为自由内存,并可以被重利用。与分配内存操作一样,这一操作在低级语言中也是需要显式地执行。