ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

2026前端面试题(七)

2026前端面试题(七) ES61.varvsletvsconst变量提升var声明的变量存在变量提升即变量可以在声明前调用值为undefinedlet和const不存在变量提升即他们所声明的变量一定要在声明后使用否则报错暂时性死区var 不存在暂时性死区let 和 const 存在暂时性死区只有等到声明变量的那一行代码出现才可以获取和使用该变量块级作用域var 不存在块级作用域let 和 const 存在块级作用域重复声明var 允许重复声明let 和 const 在同一作用域不允许重复声明变量修改声明的变量var 和 let 可以const 声明一个制度的常量。一旦声明就不能改变。使用能用const的情况下尽量使用const其他情况下大多数使用let,避免使用var2.ES6中数组新增了哪些扩展扩展运算符的应用ES6通过扩展元素符...好比rest参数的逆运算将一个数组转为用逗号分隔的参数序列主要用于函数调用的时候将一个数组变为参数序列可以将某些数据结构转为数组能够更简单实现数组复制数组的合并也更为简洁了。构造函数新增的方法Array.from()将两类对象转为真正的数组包含ES6新增的数据结构Set和MapArray.of()将一组值转换为数组copyWithin()将指定位置的成员复制到其他位置会覆盖原有成员然后返回当前数组find()用于找出第一个符合条件的数组成员findIndex()返回第一个符合条件的数组成员的位置如果所有成员都不符合条件则返回-1fill()使用给定值填充数组entries()、keys()、values()keys()是对键名的遍历、values()是对键值的遍历entries()是对键值对的遍历includes()用于判断数组是否包含给定的值flat()、flatMap()将数组扁平化处理返回一个新数组对原数据没有影响sort()排序稳定性3.函数新增了哪些扩展参数ES6允许为函数的参数设置默认值函数的形参是默认声明的不能使用let或者const再次声明属性.length将返回没有指定默认值的参数个数name返回该函数的函数名作用域一旦设置了参数的默认值函数进行声明初始化的时候参数会形成一个单独的作用域等到初始化结束这个作用域就会消失。严格模式只要函数参数使用了默认值、解构赋值、或者扩展运算符那么函数内部就不能显式设定为严格模式否则会报错箭头函数函数体内的this对象就是定义时所在的对象而不是使用时所在的对象不可以当作构造函数也就是说不可以使用new命令否则会抛出一个错误不可以使用yield命令因此箭头函数不能用作Generator函数不可以使用arguments对象该对象在函数内不存在。如果要用可以用rest参数代替4.对象新增了哪些扩展属性简写 const baz {foo:foo} 等同于 const baz {foo}属性名表达式super关键字this关键字总是指向函数所在的当前对象ES6又新增了另一个类似的关键字super,指向当前对象的原型对象对象的遍历for...in循环遍历对象自身的和继承的可枚举属性不含 Symbol 属性Object.keys (obj)返回一个数组包括对象自身的不含继承的所有可枚举属性不含 Symbol 属性的键名Object.getOwnPropertyNames (obj)返回一个数组包含对象自身的所有属性不含 Symbol 属性但是包括不可枚举属性的键名Object.getOwnPropertySymbols (obj)返回一个数组包含对象自身的所有 Symbol 属性的键名Reflect.ownKeys (obj)返回一个数组包含对象自身的不含继承的所有键名不管键名是 Symbol 或字符串也不管是否可枚举上述遍历都遵守同样的属性遍历的次序规则首先遍历所有数值键按照数值升序排列其次遍历所有字符串键按照加入时间升序排列最后遍历所有 Symbol 键按照加入时间升序排对象新增的方法Object.is()严格判断两个值是否相等Object.assign()用于对象合并Object.getOwnPropertyDescriptors()返回指定对象的所有自身属性的描述对象Object.setPrototypeOf(),Object.getProtitypeOf()设置/读取一个对象的原型对象Object.keys(),Object.values(),Object.entries()返回自身的所有可遍历属性的键名/键对应值/键值对的数组Object.fromEntries()用于将一个键值对数组转为对象返回一个对象自身的所有可遍历属性的键值对的数组5.Promise是异步编程的一种解决方案比传统的解决方案回调函数更加合理和更加强大promise对象仅有三种状态pending进行中fulfilled已成功rejected已失败特点对象的状态不受外界影响只有异步操作的结果可以决定当前是哪一种状态一旦状态改变从pending变成fulfilled和从pending变为rejected就不会再改变任何时候都可以得到这个结果用法Promise对象是一个构造函数用来生成Promise实例Promise构造函数接受一个函数作为参数该函数的两个参数分别是resolve和rejectresolve函数的作用是将Promise对象的状态从“未完成”变为“成功”reject函数的作用是将Promise对象的状态从“未完成”变为“失败”实例方法then()时实例状态发生改变时的回调函数第一个参数是resolved状态的回调函数第二个参数是rejected状态的回调函数then方法返回的是一个新的Promise实例也就是promise能链式书写的原因catch()是.then(null,rejection)或.then(undefined,rejection)的别名用于指定发生错误时的回调函数finall()用于指定不管Promise对象最后状态如何都会执行的操作Promise构造函数方法Promise.all()const p Promise.all([p1, p2, p3]) // 返回数组形式的结果 【实现多个请求合并在一起汇总所有请求结果只需设置一个loading即可】Promise.race()const p Promise.raceall([p1, p2, p3]) // 返回率先改变的实力的返回值【可以设置图片请求超时】Promise.allSettled()只有等到所有这些参数实力都返回结果不管是fulfilled还是rejected包装实例才会结束Promise.resolve()Promise.reject()Promise.try()6.Module与使用场景模块Module,是能够单独命名并独立地完成一定功能的程序语句的集合即程序代码和数据结构的集合体为什么需要模块化代码抽象代码封装代码复用依赖管理如果没有模块化我们代码会怎样变量和方法不容易维护容易污染全局作用域加载资源的方式通过 script 标签从上到下。依赖的环境主观逻辑偏重代码较多就会比较复杂。大型项目资源难以维护特别是多人合作的情况下资源的引入会让人奔溃因此需要一种将 JavaScript 程序模块化的机制如CommonJs (典型代表 node.js 早期)AMD (典型代表 require.js)CMD (典型代表 sea.js)使用export用于规定模块的对外接口import用于输入其他模块提供的功能7.Set、MapSet是一种叫做集合是由一堆无序的相关联的、且不重复的内存结构【数学中称之为元素】的组合数据结构Map是一种叫做字典是一些元素的集合。每个元素有一个称作key的域不同元素的key各不相同的数据结构共同点 集合、字典都可以存储不重复的值不同点集合是以[值值]的形式存储元素字典是以[键、值]的形式存储Set的实例关于增删改查的方法add()、delete()、has()、clear()Set实例遍历的方法keys()返回键名的遍历器values()返回键名的遍历器entries()返回键值对遍历器forEach()使用回调函数遍历每个成员Map关于增删改查的方法size()、set()、get()、has()、delete()、clear()Set实例遍历的方法keys()返回键名的遍历器values()返回键名的遍历器entries()返回键值对遍历器forEach()使用回调函数遍历每个成员
返回列表