前端面试基础知识整理【Day-9】

目录


前言

CSS篇

1.如何实现一个4:3的区域

JS篇

1.splice和slice

手写代码篇

1.手写定时器

2.让两个对象共享一个祖先


前言

前端面试基础知识整理【Day-1】-CSDN博客

前端面试基础知识整理【Day-2】-CSDN博客

前端面试基础知识整理【Day-3】-CSDN博客

前端面试基础知识整理【Day-4】-CSDN博客

前端面试基础知识整理【Day-5】-CSDN博客

前端面试基础知识整理【Day-6】-CSDN博客

前端面试基础知识整理【Day-7】-CSDN博客

前端面试基础知识整理【Day-8】-CSDN博客

CSS篇

1.如何实现一个4:3的区域

有两种方法:

  1. 使用现代CSS属性:aspect-ratio:4 / 3;
  2. 使用padding-top(padding-bottom)撑开:padding-top和padding-bottom设置成百分比时基于父元素的宽度计算
html 复制代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
  	<meta charset="UTF-8">
  	<meta name="viewport" content="width=device-width, initial-scale=1.0">
  	<title>测试</title>
  	<style>
		.box {
			width: 200px;
		}
		.ratio-box {
			aspect-ratio: 4 / 3;
			background-color: lightgreen;
		}
		.extend-box {
			position: relative;
			padding-top: 75%;
		}
		.inner-box {
			position: absolute;
			left: 0;
			top: 0;
			width: 100%;
			height: 100%;
			background-color: lightblue;
		}
  	</style>
</head>
<body>
	<div class="box ratio-box">占位符</div>
	<div class="box">
		<div class="extend-box">
			<div class="inner-box">
				占位符
			</div>
		</div>
	</div>
	<div class="console"></div>
	<script>
		const ratioBox = document.querySelectorAll('.box');
		const consoleElement = document.querySelector('.console');
		ratioBox.forEach(box => {
			const width = box.offsetWidth;
			const height = box.offsetHeight;
			consoleElement.innerHTML += `宽度: ${width}px, 高度: ${height}px<br>`;
		})
	</script>
</body>
</html>

结果:

JS篇

1.splice和slice

splice可以对数组进行原地删除、添加、替换

splice语法:

javascript 复制代码
array.splice(start, deleteCount, item1, item2, ...);
  • start:操作开始位置(包括当前位置)
  • deleteCount:删除元素数量,可以为0
  • item1,item2...:添加或替换的元素

下面是三个操作:

javascript 复制代码
// 原数组
const arr = [1, 2];
// 添加
arr.splice(0, 0, ...[3, 4]);
arr.splice(0, 0, 5);
console.log(arr); // [ 5, 3, 4, 1, 2 ]
// 删除
arr.splice(1, 2);
console.log(arr); // [ 5, 1, 2 ]
// 替换
arr.splice(1, 1, 6);
console.log(arr); // [ 5, 6, 2 ]

slice用来切割复制原数组,但是不会改变原数组

slice语法:

javascript 复制代码
array.slice(start, end);
  • start:开始位置
  • end:结束位置

slice 切割:"包头不包尾"(从start开始切,包括start。到end终止,不包括end),切割的数组是浅拷贝

javascript 复制代码
// 原数组
let cake = ['草莓', '蓝莓', '芒果', '桃子', '葡萄'];
// 切割指定位置数组
let order1 = cake.slice(1, 3);
console.log(order1); // ['蓝莓', '芒果']
// 切割到最后
let order2 = cake.slice(2);
console.log(order2); // ['芒果', '桃子', '葡萄']
// 倒着切
let order3 = cake.slice(-3, -1);
console.log(order3); // ['芒果', '桃子']
// 复制整个数组
let order4 = cake.slice();
console.log(order4); // [ '草莓', '蓝莓', '芒果', '桃子', '葡萄' ]

手写代码篇

1.手写定时器

javascript 复制代码
async function run() {
	console.log("开始执行");
	await new Promise(r => {
		console.log("进入定时器");
		setTimeout(() => {
			r();
		}, 1000);
	})
	console.log("定时器结束");
}

run();

2.让两个对象共享一个祖先

  • 场景:有A和B两个对象,现在让A和B都共享A的祖先
javascript 复制代码
const A = {
	name: "A",
	age: 12,
}
const B = {
	name: "B",
	age: 13,
}

Object.getPrototypeOf(A).say = function() {
	console.log(`名字: ${this.name}, 年龄: ${this.age}`);
}
Object.setPrototypeOf(B, Object.getPrototypeOf(A));

A.say();
B.say();	
相关推荐
sm_926787053 小时前
RFID 标签打印的技术实现要点与二次开发实践
java·大数据·前端·c++·编辑器
IMPYLH3 小时前
HTML 的 <video> 元素
前端·html
溪语流沙3 小时前
【每天一个CSS | Day19】流光文字与一笔写成的手写签名
前端·javascript·css
Interview Aid1123 小时前
SoFi 面试流程全解析:技术面试、OA 与备考指南
面试·职场和发展
逐光者9334 小时前
STM32——SPI 屏 · Flash · 高速
java·前端·stm32
To_OC4 小时前
同样是让 AI 写全栈,为什么别人一句话就够了
前端·前端框架·next.js
CDwenhuohuo4 小时前
electron pc项目打包成桌面端
前端·javascript·electron
前端大斗师4 小时前
「大于 1000」把 1000 元那单也算进去了:我在 Vue3 订单页对了 10 句话
前端·人工智能·typescript·大模型·原力计划
Jmyd01235 小时前
用 Web VR 引擎搭建 3D 虚拟展厅:从素材上云到多端实时渲染的完整数据链路
前端·3d·vr·三维数字化
YangYang9YangYan5 小时前
2027数学与应用数学转产品经理:面试解释与项目准备
面试·职场和发展·产品经理