2023最新更新常见JS面试题

213 阅读4分钟

1.JS中localStorage和sessionStorage的区别

localStorage:永久存储在本地,适合长期保存在本地的数据

sessionStorage:会话级的存储,敏感账号,用于一次性登录的

相同点:

都是保存在浏览器端

不会把数据自动发送给服务器,仅在本地保存

只能存储字符串,可以将对象JSON.stringfy()编码之后进行存储

不同点:

存储大小限制不同:sessionStorage存储的大小为5m,localStorage存储大小20m

数据有效期不同:localStorage:始终有效,窗口关闭或者浏览器关闭,一直保存,可以用来持久保存数据

sessionStorage仅在当前浏览器窗口关闭前有效,会话级别的存储

作用域不同:sessionStorage:在不同的浏览器窗口不会进行共享,只有在同一个页面中

localStorage:在所有的同源的窗口下是可以共享的

2.JS中清空数组的方法

1.splice

第一个参数:规定添加或者删除元素的位置

第二个参数:要删除元素的数量

var arr = [1,2,3,4,5]

arr.splice(0,arr.length)

2.通过length:数组的长度

arr.length=0

3.赋值为[]

arr = []

3.ES6对箭头函数的理解

1.箭头函数内的this是静态的,总是指向定义时所在的对象,而不是调用时,并且this的指向是不可以改变的

2.this始终指向函数声明时所在作用域下的this的值

3.箭头函数不能当作构造函数,也就是不可以用new命令,否则报错 -->new的执行过程,首先创建一个空对象,让箭头函数中的this指向所创建的空对象,而箭头函数中的this指向定义时所在的作用域下的this,不能改变this指向的对象,所以不能使用new命令

4.箭头函数不存在arguments对象,即不能使用伪数组去接收参数,可以使用rest参数代替

不适用的场景:与this有关的回调,事件回调,对象的方法回调

适用场景:与this无关的回调,定时器,数组的方法回调

4.JS有哪些数据类型,区别是什么

基本数据类型:string/number/boolean/null/undefined/symbol --代表创建之后独一无二并且不可变的数据类型

引用数据类型:object/function/array (归为Object)

区别:

1.声明变量时的存储分配

基本数据类型存储在栈中, var a = 10

引用数据类型存储在堆中, var arr = [1,2,3,4,5]

2.不同的内存分配机制带来了不同的访问机制

不可以直接访问堆内存空间的位置以及直接操作堆内存空间,只能操作对象在栈内存中引用地址

基本数据类型直接访问到,引用数据类型访问引用地址,根据引用地址找到堆中实体

3.复制变量时的不同

基本数据类型: var a =1,var b =a ,将原始值的副本赋值新的变量

引用数据类型: var obj = {name:'张三'},var obj1 = obj ,将引用地址赋值给新的变量

5.ES6的新特性有哪些?

ES6是ECMAScript 2015的简称,是JavaScript的一个重要版本。它引入了许多新的语言特性和API,使得JavaScript更加现代化、易读、易维护和易扩展。以下是ES6的一些新特性:

  • let和const关键字:用于声明块级作用域的变量和常量。
  • 箭头函数:一种更简洁的函数定义语法,可以自动绑定this关键字。
  • 模板字符串:一种更方便的字符串拼接语法,支持多行字符串和变量插值。
  • 解构赋值:一种更方便的变量赋值语法,可以从对象或数组中提取值并赋给变量。
  • 默认参数:一种更方便的函数参数默认值语法,可以为函数参数设置默认值。
  • 展开运算符:一种更方便的数组和对象展开语法,可以将数组或对象展开为单独的元素。
  • 类和继承:一种更方便的面向对象编程语法,可以使用class关键字定义类和继承关系。
  • 模块化:一种更方便的代码组织和复用语法,可以使用import和export关键字导入和导出模块。
  • Promise:一种更方便的异步编程语法,可以使用Promise对象处理异步操作和错误。
  • Generator:一种更方便的迭代器语法,可以使用function*关键字定义生成器函数和yield关键字生成值。