前端面试基础知识整理【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();	
相关推荐
.道阻且长.8 小时前
2.LeetCode算法习题讲解--双指针--复写零
算法·leetcode·职场和发展
用户938515635079 小时前
从零在浏览器里跑 DeepSeek-R1:WebGPU + Transformer.js 全链路实战
前端·设计模式·typescript
CodeSheep9 小时前
稚晖君公司人事大变动,来了!
前端·后端·程序员
鱼樱前端9 小时前
用 AI 做内容变收入
前端·人工智能·ai编程
浮生望9 小时前
React + TypeScript 组件设计进阶:从类型约束到无状态组件的三次进化
前端
90后的晨仔10 小时前
Mac 开发 uni-app 终极方案:让安卓模拟器彻底脱离 Android Studio 独立运行
前端·vue.js
90后的晨仔10 小时前
别再搞混了!uni-app 中 node_modules 和 uni_modules 到底是什么关系?
前端
kyriewen11 小时前
面试官问"这段逻辑为什么这样写"——我才发现,这半年我写的代码,我自己都解释不了
前端·javascript·面试
谢小飞11 小时前
大文件上传很难?学会这招,GB文件秒传不是梦
前端·node.js
程序员黑豆12 小时前
Windows 系统 Java 环境变量配置全攻略:解决“不是内部或外部命令”
java·前端·ai编程