前端八股文--js系列

js系列-持续更新版

1.如何获取一个安全的undefined值

因为undefined是一个标识符,所以可以用来当作变量名,但是是非常危险的,因为会影响 undefined 的正常判断,因此可以使用void 0来实现:

javascript 复制代码
let a = void 0
console.log(a == undefined);//true

2.闭包是什么,有什么作用

闭包是在一个内层函数中可以访问外层函数的作用域。每当创建一个函数,闭包就会在函数创建时被创建出来。

作用:

  • 创建私有变量
  • 延长了变量的生命周期。

优点:能够实现封装和缓存等

缺点:消耗内存,不正当使用会造成内存溢出的问题。

闭包形成的条件:

1.参数嵌套;

2.将内部函数作为返回值使用;

3.内部函数必须使用外部变量。

3. 原型和原型链

每一个函数都有一个protoType属性,它是一个指针,指向原型对象,每一个实例对象都有一个__proto__属性,也指向原型对象,原型对象上有一个construct属性,指向protoType所在的函数.

原型链是利用一个引用类型继承另一个引用类型的属性和方法。(沿着__proto__查找属性和方法的链称为原型链。)

4. 深拷贝和浅拷贝的区别,如何实现一个深拷贝

浅拷贝和浅拷贝的区别主要在于他们如何处理数据和对象的引用,浅拷贝只复制对象的指针,多个对象共享一个对象数据,而深拷贝是创建一个全新的对象,与拷贝对象不共享数据,新对象改变数据对原对象没有影响。

实现一个深拷贝:

javascript 复制代码
function deepClone(res) {
	//判断res类型
	const newRes = res.constructor === Array ? [] : {};
	//遍历res
	for(let key in res) {
		//判断是否有值:有-->判断当前属性
		if(res.hasOwnProperty(key)){
			//key有三种情况:object,array,基本数据类型
			if(res[key] && typeOf res[key] === 'object') {
				newRes[key] = deepClone(res[key]);
			}else {
				newRes[key] = res[key];
			}
		}
	}
	return newRes;
}
相关推荐
张鑫旭9 分钟前
都AI时代了,我为何还在学习前端基础知识?
前端
swipe21 分钟前
正则表达式入门到进阶:从表单校验到手写模板引擎
前端·javascript·面试
阿祖zu28 分钟前
别再优化 RAG 了,适配 Agent 的 LLM Wiki 知识库理念
前端·后端·aigc
kyriewen1 小时前
前端错误监控最全指南:捕获 JS 异常、Promise 拒绝、资源加载失败,附上报代码
前端·javascript·监控
狗哥哥1 小时前
船队运营可视化技术方案
前端
大家的林语冰1 小时前
ESLint 近期动态大全,新版本正式发布,antfu 大佬推荐的插件也更新了!
前端·javascript·前端工程化
只会cv的前端攻城狮1 小时前
DSL 领域模型架构设计:消灭 CRUD 重复工作
前端·架构
码事漫谈2 小时前
时序数据库2026盘点:国产数据库如何以“融合多模”走出差异化之路?
前端·后端
道友可好2 小时前
让 AI 自己验收,等于让学生自己批卷
前端·人工智能·后端
yingyima2 小时前
Go 语言正则表达式速查手册:30 分钟掌握核心语法与实战技巧
前端