docs/面试/研筑前端面试题.txt

94 lines
6.0 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

1.Vue2和Vue3的区别
1>Vue2使用Object.defineProperty 为每个属性创建getter和setter通过getter和setter来捕获操作以实现响应式更新 很多情况下,属性的新增和删除拦截不到
Vue3 通过Proxy实现proxy是ES6新特性提供了更多的拦截操作能监听到属性的删除和新增
2>vue3支持碎片化
v2中只能存在一个根节点v3中可以保持如下多个根节点一定程度上减少了标签的层级
3>生命周期不同
大部分生命周期在vue2的周期前加 on 即可vue3没有beforeCreate 和 created两个周期
4>去除this
Vue3中没有this 使用this报错 需要组件内的某个方法直接使用即可
5>组件传值props和emit
Vue2中是 props和 this.$emit Vue3中则是[defineEmits defineProps] props emit
需要注意的是 Vue2中传值给子组件可以的属性可以直接使用Vue3中子组件接收的值在props对象中所以在ts/js中使用需要 props.name
emit触发的事件需要defineProps声明接收数据defineEmits 声明以明确事件定义
6>watch和computed不同
watchcomputed与vue2用法差别不大写法改变了 vue2是将要监听的值放在watch:{ }中
Vue3监听watch第一个参数是直接传入要监听的对象 ;深度监听复杂对象 {deep true}
7>子组件实例,调用组件方法
Vue2中 子组件定义ref="name"后使用this.$refs.name 就能拿到组件name的实例同时可以this.$refs.name.test() 的方式直接调用子组件的test()方法
Vue3中子组件定义ref="name"需要用ref()来定义引用将其绑定到对应子组件上若想直接调用子组件的方法需要在子组件中defineExpose显示暴露出对应的方法组件封装性若不暴露出来则子组件实例上不会存在此方法
8>选项式api和组合式api
Vue2中 选项式的api创建组件时需要使用各种选项 data methods watch等
Vue3组合式允许将相关的代码逻辑放在一起处理让代码更易于理解和维护
9>mixins和hooks
Vue 2 中Mixins 是一种全局特性,可以在多个组件之间共享代码。你可以创建一个 Mixin 对象,然后在组件中通过 Mixins 选项引入这个对象,从而将 Mixin 中的属性和方法合并到组件中;如果多个 Mixins 中有相同的属性或方法,可能会导致命名冲突。另外,由于 Mixins 是全局的,它们会增加组件的耦合度,使得代码难以维护
Vue3的Hooks允许你将相关的逻辑组合到一起形成一个逻辑单元组件内部使用的而不是全局的这减少了命名冲突和耦合度。
2.TypeScript VS JavaScript 对比区别
1>语法
TS 静态类型注解,类和接口定义,枚举类型,装饰器等
JS 基本的面向对象语法,原型链继承,匿名函数等
2>类型系统
TS 强大的静态类型系统,类型推断,类型注解,联合类型,交叉类型,泛型支持,严格的类型检查
JS 动态类型系统,基于值的类型推断,灵活但容易出错
3>工具支持
TS 强大的编辑器支持(如 Visual Studio Code代码补全类型检查重构功能错误提示智能感知自动导入等
JS基本的编辑器支持某些编辑器提供基本的代码补全和错误提示
4>类型声明文件支持
TS 丰富的类型声明文件生态系统,用于描述 JavaScript 库的类型,提供了良好的第三方库和框架的类型定义
JS JavaScript 库的类型声明文件相对较少,需要手动编写或通过社区维护
5>类型安全
TS 静态类型检查使得编码过程中能够尽早发现类型错误和潜在问题,提高代码质量和可维护性
JS 动态类型系统导致类型错误只能在运行时才能发现,可通过测试覆盖率、代码质量工具等方式减少错误出现的概率
6>性能
TS 编译过程会引入额外的开销,但生成的 JavaScript 代码在运行时性能与直接编写的 JavaScript 代码相当
JS 更简单的解释执行,没有额外的编译开销,运行效率相对较高
7>迁移成本
TS 在现有 JavaScript 项目中引入 TypeScript 需要进行一定的迁移工作,并对代码进行类型注解。但可以逐步完成迁移过程,避免一次性的大规模重构
JS 无需迁移成本,现有的 JavaScript 代码可以直接运行
8>社区和生态系统
TS 日益壮大的社区,活跃的开发者社区,丰富的第三方库和工具支持,官方和社区维护的文档和教程
JS 世界最大的开源生态系统之一,庞大的开发者社区和资源
9>适用场景
TS 大型项目和团队合作,需要更强类型安全性和工具支持的项目;前端框架和库开发,需要构建复杂的应用逻辑和可重用的组件;需要长期维护的项目;与其他静态类型语言集成的项目
JS 快速原型开发,小型项目,脚本编写,前端开发中一次性使用的简单脚本等
3.CSS中display样式中Flex布局的使用
Flex 弹性布局具有以下特点:
1>主轴与交叉轴弹性容器具有主轴main axis和交叉轴cross axis。默认情况下主轴是水平方向交叉轴是垂直方向。
2>弹性容器:通过将父元素的 display 属性设置为 flex 或 inline-flex 来创建弹性容器。
子元素的弹性项目:弹性容器中的每个子元素都成为弹性项目。子元素可以指定各自在主轴和交叉轴上的大小、顺序以及对齐方式等。
3>主轴对齐:弹性项目可以在主轴上按照一定比例分配空间,也可以使用 justify-content 属性定义主轴的对齐方式。
4>交叉轴对齐:弹性项目可以在交叉轴上进行对齐,包括顶部对齐、底部对齐、居中对齐等,使用 align-items 属性定义交叉轴对齐方式。
5>换行与自动调整:可控制弹性项目是否换行,并且具备自动调整元素大小的能力。
弹性布局简化了网页布局的开发过程,提供了更灵活、响应式的布局方式。它适用于各种屏幕尺寸和设备类型,并能够快速适应不同的布局需求。