No119.精选前端面试题,享受每天的挑战和学习

news2025/1/11 14:05:19

在这里插入图片描述

文章目录

    • 实现栈,有入栈出栈的方法,以及length属性
    • 如何封装组件
    • 单页应用怎么跨页面传参
    • 权限怎么设计的
    • map和forEach对于对象类型会不会改变

实现栈,有入栈出栈的方法,以及length属性

可以通过 JavaScript 的数组来实现一个栈结构,如下所示:

class Stack {
  constructor() {
    this.items = [];
  }

  push(element) {
    this.items.push(element);
  }

  pop() {
    if (this.isEmpty()) {
      return "栈为空";
    }
    return this.items.pop();
  }

  isEmpty() {
    return this.items.length === 0;
  }

  length() {
    return this.items.length;
  }
}

上述代码定义了一个 Stack 类,通过 push 方法将元素入栈,通过 pop 方法将元素出栈,通过 isEmpty 方法检查栈是否为空,通过 length 方法获取栈的长度。

可以使用如下方式实例化一个栈并使用:

const stack = new Stack();
stack.push(1);
stack.push(2);
stack.push(3);

console.log(stack.length());  // 输出 3

console.log(stack.pop());     // 输出 3
console.log(stack.pop());     // 输出 2
console.log(stack.pop());     // 输出 1

console.log(stack.isEmpty()); // 输出 true
console.log(stack.length());  // 输出 0

以上示例展示了如何使用栈的入栈、出栈、判断是否为空和获取长度的方法。

如何封装组件

要封装一个组件,通常需要以下步骤:

  1. 创建一个 JavaScript 类或函数来定义组件的行为和状态。

  2. 决定组件的公共接口,即其他组件可以使用的属性和方法。

  3. 在组件内部实现这些属性和方法,并将其封装在组件的类或函数中。

  4. 提供一种方式让其他组件使用该组件,通常是通过导出组件的类或函数。

以下是一个简单的示例,展示了如何封装一个简单的按钮组件:

class Button {
  constructor(text, onClick) {
    this.text = text;
    this.onClick = onClick;
  }

  render() {
    const button = document.createElement('button');
    button.textContent = this.text;
    button.addEventListener('click', this.onClick);
    return button;
  }
}

export default Button;

上述代码定义了一个 Button 类,它接受一个文本和一个点击事件处理函数作为参数。render 方法用于创建一个按钮元素,并将文本和点击事件处理函数应用于该按钮。

通过 export default Button,我们将 Button 类导出为一个可以在其他文件中导入和使用的模块。

其他组件或模块可以这样使用该按钮组件:

import Button from './Button';

function handleClick() {
  console.log('按钮被点击了');
}

const button = new Button('点击我', handleClick);
const buttonElement = button.render();

document.body.appendChild(buttonElement);

上述代码中,我们导入了 Button 组件,并创建了一个按钮实例。通过调用 render 方法,我们获取到一个创建好并添加了点击事件的按钮元素,并将其附加到 body 元素中。

这就是一个简单的组件封装过程。根据具体需求,封装的组件可以更加复杂,可以包含更多的属性和方法,并提供更多的功能和定制选项。

解题思路:传送门
在这里插入图片描述

单页应用怎么跨页面传参

在单页应用中,页面之间跳转是无刷新的,因此无法直接通过URL传递参数。但可以通过以下几种方式实现页面之间的参数传递:

  1. 使用URL参数传递:将参数拼接在URL中,然后在跳转页面时解析URL参数。这种方式适用于参数较少,且不敏感的情况。

  2. 使用State参数传递:通过状态管理库(如React的Context API、Redux等)将参数存储在状态中,在跳转页面时获取参数。这种方式适用于参数需要在多个页面间共享的情况。

  3. 使用储存(存储)机制:将参数存储在本地存储中(如localStorage、sessionStorage等),在跳转页面时获取参数。这种方式适用于参数需要在多个标签页或窗口间共享的情况。

  4. 使用路由参数传递:在前端框架中,如React的React Router等,可以通过路由参数传递参数。例如,可以将参数作为路由的一部分,然后在跳转页面时获取参数。

以上是常用的跨页面传参方式,选择适合你的项目需求的方式进行参数传递。

权限怎么设计的

权限设计是一个很重要的项目设计方面,通常可以按照以下步骤进行:

  1. 角色定义:首先需要定义系统中的角色,例如管理员、普通用户、访客等。每个角色可以拥有不同的权限。

  2. 权限定义:根据系统功能,定义各种权限,例如创建、编辑、删除等。将权限进行分类,便于管理和授权。

  3. 授权机制:确定系统使用的授权机制,常见的有基于角色的访问控制(Role-Based Access Control,RBAC)和基于资源的访问控制(Resource-Based Access Control,RBAC)等。根据授权机制,给每个角色分配适当的权限。

  4. 用户权限管理:对用户进行权限管理,将用户分配到相应的角色,并设置角色对应的权限。

  5. 权限验证:在系统中的关键操作进行权限验证,确保只有具有足够权限的用户才能执行。

  6. 安全策略:制定合理的安全策略,例如加密存储、防止SQL注入等,保证权限系统的安全性。

  7. 审核和监控:建立权限变更审批流程,记录每个用户的权限变更历史,定期进行权限审查和监控。

以上是权限设计的一般步骤和考虑因素,具体的权限设计还需要根据项目的需求和复杂程度进行调整和完善。

map和forEach对于对象类型会不会改变

摘抄:map和forEach方法都不会改变对象类型,它们只会遍历数组并执行回调函数。
但是回调函数内部可能会改变对象的属性值,因为对象本身是引用类型,所以如果在回调函数内部改变了对象属性,那么原始对象也会被改变
如果要避免原始对象被改变,可以在回调函数内部创建一个新的对象来存储新的属性值,而不是直接修改原始对象的属性

  • map() 方法会创建一个新数组,其元素是原始数组执行回调函数后的返回值。如果原始数组是对象类型的数组,那么新数组也将包含相同的对象引用。

  • forEach() 方法会遍历数组并执行回调函数,对于对象类型的数组,它直接在每个对象上执行回调函数,不改变数组本身。

举个例子:

const originalArray = [{ name: 'Alice' }, { name: 'Bob' }, { name: 'Charlie' }];

const mappedArray = originalArray.map((item) => {
  return { ...item }; // 创建一个新的对象,将原始对象的属性复制到新对象中
});

const forEachArray = [];
originalArray.forEach((item) => {
  forEachArray.push({ ...item }); // 将原始对象的属性复制到新对象中,并放入新数组中
});

console.log(mappedArray);   // [{ name: 'Alice' }, { name: 'Bob' }, { name: 'Charlie' }]
console.log(forEachArray);  // [{ name: 'Alice' }, { name: 'Bob' }, { name: 'Charlie' }]
console.log(originalArray); // [{ name: 'Alice' }, { name: 'Bob' }, { name: 'Charlie' }]

在上述例子中,mappedArrayforEachArray 都是创建了一个新的对象数组,而原始数组 originalArray 并没有发生变化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/938877.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

倒数 2 周|期待 2023 Google开发者大会

9 月 6-7 日,中国上海 前沿科技,新知同享 趣味体验,灵感齐聚 技术生态,多元共进 关注官网最新信息,敬请期待大会开幕 2023 Google 开发者大会官网 相信你一定记得,在今年 5 月的 Google I/O 大会上&am…

考察交流 | 九江市浔阳区委常委、副区长雷霆钧一行考察中创算力

考察交流 8月25日,九江市浔阳区委常委、副区长雷霆钧来访中创算力开展招商考察,中创董事长许伟威热情接待了调研领导一行。浔阳区数字经济发展中心主任曹超成、九江电信浔阳分局局长黄健、九江新联智创董事长刘诚志、德国石荷州中资企业协会副会长陈虹瑾…

SAP从放弃到入门系列之abapGit安装

文章目录 一、概括二、系统环境三、安装独立版本四、安装开发者版本4.1、在线安装(推荐)4.2、离线安装 前段时间看了汪子熙老师关于abap2UI5的文章,感觉很有意思,来了解一下。abapGit 安装的文章已经有很多了,但是为了在系统里使用…

redis windows 版本安装

1. 下载windows安装包并解压 如果是Linux版本可以直接到官网下载,自3.x起官网和微软网站就没有redis安装包更新了,好在github有开发者在编译发布更新(目前最新有5.0.9版本可下),地址:redis windows 5版本下…

即时通讯开发中的5个难点及解决方案

在当今数字化时代,人们越来越依赖即时通讯应用程序进行实时消息传递、语音通话和视频聊天。然而,即时通讯开发并非易事,开发人员需要克服许多技术和功能上的挑战。以下是即时通讯开发过程中最常见的5个难点,以及专家们提出的解决方…

新闻稿发布策略:选择合适渠道,让品牌故事传遍大江南北

新闻稿是企业宣传和传媒报道的重要工具,它可以传达企业的最新动态、产品推出、重要事件等信息。而如何正确发布新闻稿,选择合适的发布渠道,对于提高新闻稿的曝光度和影响力至关重要。在本文中,我们一秒推小编将探讨新闻稿的发布方…

完美解决Ubuntu网络故障,连接异常,IP地址一直显示127.0.0.1

终端输入ifconfig显示虚拟机IP地址为127.0.0.1&#xff0c;具体输出内容如下&#xff1a; wxyubuntu:~$ ifconfig lo: flags73<UP,LOOPBACK,RUNNING> mtu 65536inet 127.0.0.1 netmask 255.0.0.0inet6 ::1 prefixlen 128 scopeid 0x10<host>loop txqueuelen …

Linux必备的5款神仙国产软件,让你工作效率成倍提升

随着近些年来国产化计算机的普及&#xff0c;国内的Linux用户逐渐开始多了起来&#xff0c;虽然Linux操作系统的生态不像Windows那么完善&#xff0c;有众多办公软件可以选择&#xff0c;但也有一定数量的软件资源&#xff0c;其中也包括一些优秀的国产软件。下面我将为大家分享…

【VS Code插件开发】状态栏(五)

&#x1f431; 个人主页&#xff1a;不叫猫先生&#xff0c;公众号&#xff1a;前端舵手 &#x1f64b;‍♂️ 作者简介&#xff1a;前端领域优质作者、阿里云专家博主&#xff0c;共同学习共同进步&#xff0c;一起加油呀&#xff01; &#x1f4e2; 资料领取&#xff1a;前端…

uniapp 实现地图距离计算

在uniapp中实现地图距离计算可以借助第三方地图服务API来实现。以下是一种基本的实现方式&#xff1a; 注册地图服务API账号&#xff1a;你可以选择使用高德地图、百度地图等提供地图服务的厂商&#xff0c;注册一个开发者账号并获取API密钥。 安装相关插件或SDK&#xff1a;根…

怎么选择自定义工作流自定义表单?

在快节奏社会中&#xff0c;传统的表单制作已经无法胜任日益繁琐的办公工作了&#xff0c;只有选择更有优势的自定义工作流自定义表单工具&#xff0c;才能提质、降本、增效&#xff0c;为不同领域的客户朋友带来可观的市场效益。选好专业的低代码技术平台&#xff0c;就可以在…

Gitlab设置中文

1. 打开设置 2.选择首选项Preferences 3. 下滑选择本地化选项Localization&#xff0c;设置简体中文&#xff0c;然后保存更改save changes。刷新网页即可。

创建QT项目

目录 使用向导创建 新建项目 设置项目名称和创建项目路径 ​编辑 选择编译套件 修改类的名字和基类 ​编辑完成 ​编辑 手动创建 .pro文件 注释 TEMPLATE TARGET HEADERS FORMS SOURCES RESOURCES 配置信息 简单QT应用程序的示例 使用向导创建 新建项目 设置项…

数据仓库ELT流程是啥?8大好用的ELT工具我找来了,赶紧收藏!

一、数据抽取 数据源是指存储数据的源头&#xff0c;包括结构化数据、半结构化数据、非结构化数据等。 结构化数据&#xff1a;可以采用直连数据库的方式进行抽取&#xff0c;一般采用JDBC&#xff08;Java Database Connectivity&#xff09;。这种方式的优点是数据抽取效率高…

设计模式第十三讲:编写可读代码的艺术

设计模式第十三讲&#xff1a;编写可读代码的艺术 编写可读代码是极为重要的&#xff0c;编程有很大一部分时间是在阅读代码&#xff0c;不仅要阅读自己的代码&#xff0c;而且要阅读别人的代码。因此&#xff0c;可读性良好的代码能够大大提高编程效率。可读性良好的代码往往会…

老网工的爱情故事二:从VPN到SD-WAN,爱情与技术的升华

— 前言 — 为什么爱情不能像设置VLAN一样 把不同的“IP”的人绑在一起&#xff1f; 为什么周围的事物 不能像创建ACL那样随心所欲的控制&#xff1f; 为什么相爱的人远在天涯 不能像做VPN一样拉到近在咫尺&#xff1f; 为什么你我之间没有一个边界路由呢&#xff1f; 我已经给…

02深入探究:OA项目会议发布、左侧菜单和动态选项卡的完美合盘

目录 1.左侧导航 导航一般指页面引导性频道集合&#xff0c;多以菜单的形式呈现&#xff0c;可应用于头部和侧边&#xff0c;是整个网页画龙点晴般的存在。 面包屑结构简单&#xff0c;支持自定义分隔符。 注&#xff1a;千万不要忘了加载 element模块。虽然大部分行为都是…

Redis之集群模式

一、Redis集群 一个节点就是一个运行在集群模式下的Redis服务器&#xff0c;Redis服务器在启动时会根据cluster-enabled配置选项是否为yes来决定是否开启服务器的集群模式。 Redis节点不会互相发现&#xff0c;连接各个节点的工作需要使用cluster meet命令来完成 CLUSTER MEE…

Nginx-报错no live upstreams while connecting to upstream

1、问题描述 生产环境Nginx间歇性502的事故分析过程 客户端请求后端服务时一直报错 502 bad gateway&#xff0c;查看后端的服务是正常启动的。后来又查看Nginx的错误日志&#xff0c;发现请求后端接口时Nginx报错no live upstreams while connecting to upstream&#xff0c…

快速收集form表单元素的值-----serialize函数

form-serialize–github 下载下来之后在页面引用 <form id"form"><input type"text" name"username" value"123"><input type"text" name"password"></form><script src"./seria…