前端基础题目

目录

自我介绍

技术栈

Vuex作用

Vue-Router作用

父子组件通信

作用域链

什么是递归,优缺点

Css动画

定时器实现轮播图坏处

数组,对象(函数)

1. 设计的一个函数,接收两个数字作为参数,输出这两个数字之间所有的整数

2. 设计一个函数,接收一个对象作为参数,返回对象中所有属性名组成的新数组

3. 设计一个函数,接收两个数组作为参数,返回两个数组合并后的新数组

关于数组的方法有哪些,返回的是什么


自我介绍

嗯,好的,我是一个对前端开发充满热情的人,并且已经学习了许多与前端开发相关的课程和技术。我熟悉HTML、CSS和JavaScript,能够使用这些技术构建响应式和交互式的网页。我还具备一定的设计能力,能够将设计稿转化为实际的网页界面,并确保在不同浏览器和设备上的兼容性。除了技术方面,我也非常注重团队合作和沟通能力。喜欢学习新的技术和工具,不断提升自己的能力。 作为一名前端实习生,我希望能够借此机会在实践中不断学习和成长。我相信我具备良好的学习能力和适应能力,能够快速融入团队并为项目的成功做出贡献。感谢您给我介绍自己的机会,我很期待能够加入贵公司。

项目介绍(亮点)

我觉得项目挺基础的没什么亮点。。。(个人情况。。。。)

技术栈

HTML(超文本标记语言):用于创建网页结构和内容的标记语言,是前端开发的基础。

CSS(层叠样式表):用于网页的样式设计和布局,控制网页的外观和排版。

JavaScript:一种用于网页交互和动态效果的脚本语言,使网页能够与用户进行交互。

框架vue:常见的前端框架包括React、Angular和Vue.js等,用于简化前端开发,提供更高效的组件化和页面管理。

CSS预处理器:如Sass和Less,用于扩展CSS的功能,提供变量、嵌套、混合等特性,提高CSS的可维护性和可复用性。

构建工具Webpack:如Webpack和Gulp,用于将多个前端资源进行打包、压缩和优化,提高前端项目的性能和开发效率。

调试工具:如 谷歌Chrome开发者工具,用于调试和排查前端代码的问题,包括查看元素、网络请求、控制台输出等功能。

版本控制工具Git:如Git,用于管理和协作开发团队的代码版本,方便代码的追踪、合并和回滚。

Vuex作用

项目遇到多个状态,在多个界面间的共享问题。比如用户的登录状态、用户名称、头像、地理位置信息等。这些状态信息,都可以放在统一的地方,对它进行保存和管理。5个属性

state:用于定义属性,用于存储状态、数据

mutations:用于处理state的方法

actions:mutations的异步版

getters:Vuex的计算属性。 引入Vuex,使用mapGetters

modules:Vuex模块化

Vue-Router作用

vue-router 可以帮助我们管理应用程序中的路由,从而使用户能够访问应用程序的各个部分。路由可以看作是前端程序中的页面,比如登录、主页、个人中心。实现路由可以让程序具有页面路由功能,从而能够实现多页面之间切换,以及 URL 中的参数控制页面的显示。

query 传参配置的是path,而params传参配置是name,在params中配置path无效;
query在路由配置不需要设置参数,而params必须设置
query传递的参数会显示在地址栏中
params传参刷新会无效,但是query会保存传递过来的值,刷新不变 ;

路由传参:query传参通过path跳转,params传参通过name跳转,

params    <router-link :to="`/path/${id}`"><router-link>    

query     <router-link :to="{path:'/path',query:{id:'123'}}"><router-link>

// params通过path匹配路由,且在path后面跟上对应的值
params    this.$router.push({                   query   this.$router.push({
                path: `/path/${id}`                               path:'/path',
           })                                                query: { id:'123'}  })    

// 通过name匹配路由
this.$router.push({
  name: "name", //路由配置中的name
  params:{ id:222 }  });

父子组件通信

父 > 子    父组件通过 props 传递数据给子组件

在父组件中自定义名称便于子组件调用

在子组件中使用props { users:{ //这个就是父组件中子标签自定义名字type:Array } }

子 > 父   (通过事件形式)

再子组件 用$emit自定义事件,

changeTitle() { this.$emit ("titleChanged", "子向父组件传值"); //自定义事件 }

父组件中 v-on 的方式实现。

作用域链

各个作用域的嵌套关系组成一条作用域链。

作用域链主要是进行标识符(变量和函数)的查询,标识符解析就是沿着作用域链一级一级的搜索标识符的过程,而作用域链就是保证对变量和函数的有序访问。

(1)如果自身作用域中声明该变量,则无需使用作用域链

(2)如果自身作用域中未声明该变量,则需要使用作用域链进行查找

什么是递归,优缺点

在递归中,函数或过程会反复调用自身,每次调用都会解决一个规模更小的子问题,直到达到终止条件并返回结果。

优点

1.可读性高:递归可以更直观地表达问题的解决思路,使代码更易于理解和维护。

2.代码简洁:相对于迭代循环,递归可以用更少的代码实现相同的功能。

3.解决复杂问题:某些问题的解决思路天然适合使用递归,例如树的遍历、图的搜索等。

缺点:

1.性能开销:递归可能导致函数的多次调用和重复计算,增加了函数调用栈的开销,可能会占用较多的内存和处理时间。

2.栈溢出风险:递归深度过大时,函数调用栈可能超出限制,导致栈溢出错误。

3.难以调试:递归中涉及到多层嵌套调用,当出现问题时,调试和定位错误可能较为困难。

Css动画

transition过渡动画

transform 转变动画

CSS动画实现原理基于CSS的过渡(transition)和关键帧动画(keyframes)两种技术。

过渡(transition

transition-property: width; /* 过渡的属性 */  

transition-duration: 1s; /* 过渡的持续时间 */

transition-timing-function: ease; /* 过渡的时间函数 */  

transition-delay: 0s; /* 过渡的延迟时间 */

@keyframes slide-in {  0% {    opacity: 0; /* 初始状态的样式 */    transform: translateX(-100%);  }  100% {    opacity: 1; /* 结束状态的样式 */    transform: translateX(0);  }}

animation-name: slide-in; /* 使用关键帧动画 */  

animation-duration: 1s; /* 动画的持续时间 */  

animation-timing-function: ease; /* 动画的时间函数 */  

animation-delay: 0s; /* 动画的延迟时间 */  

animation-fill-mode: forwards; /* 动画结束后保持最后一个关键帧的样式 */

定时器实现轮播图坏处

页面性能:定时器会周期性地触发轮播图的切换,这个过程会占用一定的系统资源,特别是当页面中存在多个轮播图或其他复杂的交互组件时,可能会对页面的性能产生一定的影响。

内存泄漏:如果没有正确处理定时器,可能会导致内存泄漏。如果在页面切换或销毁时没有清除定时器,定时器会持续执行。导致内存泄漏问题。

用户体验:定时器的时间间隔是固定的,无法根据用户的实际操作和需求进行动态调整。如果用户希望停留在某一张轮播图上或者手动切换轮播图,定时器的切换可能会干扰用户的操作,影响用户体验。

数组,对象(函数)

1. 设计的一个函数,接收两个数字作为参数,输出这两个数字之间所有的整数

使用示例:printIntegers(3,7) ; // 输出 3 4 5 6 7

function printIntegers(start, end) {  函数

    if (start > end) {

        console.log("开始数字必须小于或等于结束数字");

        return;

    }

    for (let i = start; i <= end; i++) {

        console.log(i);

    }

}

设计一个函数,接收一个对象和一个元素作为参数,判断该元素是否在对象中存在

使用示例: obj.hasOwnProperty(key)  方法  查找一个对象是否有某个属性

let person = { name: 'John', age: 25 };

console.log(isPropertyValueExists(person, 25)); // 输出 true

console.log(isPropertyValueExists(person, 'Mary')); // 输出 false

function isPropertyValueExists(obj, value) {

    for (let key in obj) {

        if ( obj.hasOwnProperty(key) && obj[key] === value) {

            return true;

        }

    }

    return false;

}

2. 设计一个函数,接收一个对象作为参数,返回对象中所有属性名组成的新数组

使用示例: Object . keys(obj) ;  方法

let person = { name: 'John', age: 25 };

console.log(getPropertyNames(person));  // 输出 ['name', 'age']

function getPropertyNames(obj) {

    return Object.keys(obj);

}

3. 设计一个函数,接收两个数组作为参数,返回两个数组合并后的新数组

使用示例:  arr1.concat(arr2)  方法  数组合并

Let arr1=[1,2,3] ;   let arr2=[4,5,6] ;

console.log(mergeArrays(arr1,arr2)); /[1,2,3,4,5,6]

function mergeArrays(arr1, arr2) {

    return arr1.concat(arr2);

}

关于数组的方法有哪些,返回的是什么

JavaScript中的数组有许多内置方法,用于对数组进行操作、修改和转换。以下是一些常用的数组方法及其返回值的简要描述:

1.push(): 在数组末尾添加一个或多个元素,并返回新数组的长度。
2. pop(): 移除并返回数组的最后一个元素。
3. shift(): 移除并返回数组的第一个元素。
4. unshift(): 数组开头添加一个或多个元素,并返回新数组的长度。会修改原数组
5. concat(): 连接两个或多个数组,并返回新数组。
6. slice(): 从原数组中提取指定位置的元素,返回一个新数组。
7. splice(): 在指定位置修改数组,删除、替换或添加元素,并返回被删除的元素组成的数组。
8. join(): 将数组的所有元素连接成一个字符串,并返回该字符串。
9. indexOf(): 查找指定元素在数组中的第一个匹配位置的索引,如果未找到则返回-1。
10. lastIndexOf(): 查找指定元素在数组中的最后一个匹配位置的索引,如果未找到则返回-1。
11. forEach(): 遍历数组中的每个元素,执行指定的回调函数,没有返回值。
12. map(): 遍历数组中的每个元素,执行指定的回调函数,并返回一个由回调函数返回值组成的新数组。
13. filter(): 遍历数组中的每个元素,根据指定条件过滤元素,并返回一个由符合条件的元素组成的新数组。不改变原数组
14. reduce(): 从数组的第一个元素开始,依次迭代执行指定的回调函数,返回一个累积的结果。
15. reduceRight(): 从数组的最后一个元素开始,依次迭代执行指定的回调函数,返回一个累积的结果。
16. sort(): 对数组元素进行排序,修改原数组,并返回排序后的数组。
17. reverse(): 反转数组元素的顺序,修改原数组,并返回反转后的数组。
18. some(): 检测数组中是否至少有一个元素满足指定条件,返回布尔值。
19. every(): 检测数组中的所有元素是否都满足指定条件,返回布尔值。
20. find(): 查找数组中第一个满足指定条件的元素,并返回该元素。
21. findIndex(): 查找数组中第一个满足指定条件的元素的索引,并返回该索引。

这些只是一些常见的数组方法,JavaScript中还有其他很多数组方法可以根据需要使用。

请注意,大多数数组方法都是非破坏性的,即它们不会修改原始数组,而是返回一个新的数组或其他值。然而,这些方法, pop()、push()、shift()、unshift()、splice()、sort()、reverse(),会直接修改原始数组

返回不改变原数组的方法

数组排序

在数组中找到相应字符串

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值