js 判断数组_前端面试系列——JS面试题1

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 语言)中,这是一个开发人员需要自己处理的显式执行的操作。然而,在高级语言中,系统会自动为你分配内在。
使用内存 — 这是程序实际使用之前分配的内存,在代码中使用分配的变量时,就会发生读和写操作。
释放内存 — 释放所有不再使用的内存,使之成为自由内存,并可以被重利用。与分配内存操作一样,这一操作在低级语言中也是需要显式地执行。

190327c38cbae61977f70b3592b5a68e.png

b4ffc2a1c86f0691b06254bb51a025a7.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值