前端八股文--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;
}
相关推荐
腾讯TNTWeb前端团队7 小时前
helux v5 发布了,像pinia一样优雅地管理你的react状态吧
前端·javascript·react.js
范文杰10 小时前
AI 时代如何更高效开发前端组件?21st.dev 给了一种答案
前端·ai编程
拉不动的猪10 小时前
刷刷题50(常见的js数据通信与渲染问题)
前端·javascript·面试
拉不动的猪10 小时前
JS多线程Webworks中的几种实战场景演示
前端·javascript·面试
FreeCultureBoy11 小时前
macOS 命令行 原生挂载 webdav 方法
前端
uhakadotcom12 小时前
Astro 框架:快速构建内容驱动型网站的利器
前端·javascript·面试
uhakadotcom12 小时前
了解Nest.js和Next.js:如何选择合适的框架
前端·javascript·面试
uhakadotcom12 小时前
React与Next.js:基础知识及应用场景
前端·面试·github
uhakadotcom12 小时前
Remix 框架:性能与易用性的完美结合
前端·javascript·面试
uhakadotcom12 小时前
Node.js 包管理器:npm vs pnpm
前端·javascript·面试