1.谈谈你对 ES6 的理解,为什么要学习es6?
ES6 是 2015 年发布的 JavaScript 第六版标准,主要解决 ES5 的语法缺陷(如作用域混乱、字符串处理繁琐、模块化困难等),引入多项新特性,以提升代码简洁性、规范性与可维护性。
2.es6和es5的区别?(请写出5条)
变量定义上:ES6 新增 let 和 const;
字符串拼接:引入了新的模板字符串拼接
函数定义上:ES6 新增无需 function 的箭头函数;
循环上:ES6 引入 for…of 循环迭代可迭代对象;
数据类型上: ES6 新增基本数据类型 symbol以支持唯一值。
解构赋值:快速从数组 / 对象中提取值。
扩展运算符:可将可迭代对象(数组、字符串等)展开为独立元素,或收集剩余值为数组
3.ES和js有什么关系?
“ES” 通常指的是 ECMAScript,它是 JavaScript 的规范ECMAScript 是一种由欧洲计算机制造商协会(ECMA)通过的脚本语言的标准,其主要是用于网络浏览器,以提供交互式的网页内容。
4.解构赋值及其原理?
解构赋值是 JS 中允许从数组或对象提取数据赋值给变量的语法,能简洁访问复杂数据、减少冗余代码;
原理:依赖模式匹配,当左侧变量模式与右侧数据结构匹配时,引擎通过迭代或属性访问解包数据并完成赋值。
5.var let const 的区别和使用场景?
区别:var 是函数作用域,允许重复声明和重赋值,有变量提升;let 是块作用域,不允许重复声明但可重赋值,无变量提升;
const 是块作用域,不允许重复声明和重赋值(需声明时初始化)。使用场景:var用于声明任意类型且无需块级隔离的变量;
let 用于声明普通类型; const 用于声明对象,数组。可以写:变量,算数运算,函数调用,三元表达式,对象属性。
6.什么是模板字符串? 比普通字符串的好处?
模板字符串是 ES6 引入的字符串语法,以反引号(`)包裹内容,核心优势在于无需传统字符串拼接,可通过${JS表达式}直接嵌入变量或函数结果,还能直接包含多行文本而不用\n等转义字符,整体大幅简化了字符串操作,让代码更易读、更易维护。
7.箭头函数和普通函数有什么区别
箭头函数与普通函数在多个方面存在差异:箭头函数以简洁的箭头语法定义,均为匿名函数,不能作为构造函数使用,没有自身的 this、arguments(类数组对象) 对象和原型;
普通函数用 function 定义,可匿名也可具名,能作为构造函数创建实例,其 this 指向调用者,有 arguments(类数组对象) 对象和原型。
8.什么是扩展运算符?有什么使用场景?
扩展运算符(…)可将可迭代对象(数组、字符串等)展开为独立元素,或收集剩余值为数组。
场景:数组合并/复制、对象合并/复制、函数参数展开、收集剩余参数等。
9.什么是symbol?
定义:Symbol 是 ES6 新增的一种数据类型,被划分到基本数据类型中,用于表示独一无二的值。使用场景:作为对象唯一属性键避免命名冲突、模拟私有属性,及作为唯一标识。
10.Set和Map有什么相同和不同之处?
相同点:均存储唯一元素,支持迭代器访问。
不同点:
Set存唯一值,用add()添加,无直接获取单元素方法;
Map存键值对,用set()添加,可通过get()取值。
场景:
Set:去重、存独立唯一值;
Map:键值映射(如配置表、缓存)。
11.如何声明一个类?类如何继承?
通过 class 关键字声明类,使用 extends 关键字实现类的继承
12.模块化有什么好处?
模块化开发优势显著:模块独立可减少修改时的错误传播,新增功能无需重构仅需加模块;能支持并行开发缩短周期,通用模块可跨项目复用降成本;还以分治思想简化问题、明确团队分工,既降低开发复杂度,又减少代码冲突提升协作效率。
13.什么是Proxy?
创建对象代理,可拦截对象操作(如属性访问)并自定义处理,接收目标对象和含 “捕获器” 的处理程序,用于数据验证、日志等。
14.什么是Promise?
Promise 语法上是一个构造函数,用来封装异步操作并可以获取其成功或失败的结果;
常用于网络请求,定时器操作,异步操作等
Promise.prototype.then 方法:用于接收成功
Promise.prototype.catch 方法:用于接收失败
Proxy与Promise区别
Proxy 用于数据响应式、权限控制;Promise 用于异步串联、并行任务处理
15.什么是封装?为什么要封装?
隐藏对象内部细节,仅对外暴露公共接口;
可简化维护(改内部不影响调用方)、贴合认知(属性与函数关联成对象)、增强安全(限制属性访问)。