首页 > 其他分享 >前端面试题(1) js

前端面试题(1) js

时间:2023-02-08 17:55:51浏览次数:32  
标签:tmp 面试题 obj 前端 js deepClone let key new

keywords:JS 深拷贝

深拷贝:针对【引用】类型,传递的是地址,多变量同时指向同一块内存地址(比如某个对象)

let obj1={
	//1.不需要处理
	//基本数据类型可以不做处理,typeof !== 'object'
	num:12,
	str:'xxx',
	bol:false,
	//函数的处理一般只是功能的复用
	fn:function(){ console.log(6) },
	//也不需要处理
	nulVal:null
	
	//2.需要处理
	//无元素,可以直接通过构造函数new出来的新数据
	date:new Date(),
	reg:/7/,
	
	//3.新结构
	map:new Map([['d',8],['e',9]]),
	set:new Set([10,11]),

	//4.key和value
	array:[1,2],
	arrayObj:[{a:3,b:4}],
	obj:{c:5},
}

//let cloned=obj1
//把一个对象先从一个JS变量变成字符串,在把字符串变成js变量
//let cloned=JSON.parse(JSON.stringify(obj1));
function deepClone(obj){
	//1.不处理
	if(typeof(obj)!=='object' || !obj) return obj;

	let tmp,params
	//2.无元素
	if(obj instanceof RegExp || obj instanceof Date){
		//new RegExp()
		//new Date()
		params=obj
		//let constructor=obj.constructor
		//new constructor(obj);
	}
	tmp=new constructor(params)
	//3.新结构
	//new Set()
	//new Map()
	if(obj instanceof Map){
		for(let [key,value] of obj){
			tmp.set(deepClone(key),deepClone(value));	
		}
	}else if(obj instanceof Set){
		for(let value of obj){
			tmp.add(deepClone(value));	
		}
	}else{//4.key val 
		for(let key in obj){
			tmp[key]=deepClone(obj[key])
		}
	}
	//4.key Val
	//new Array()
	//new Object()
	if(obj instanceof Array || Object.prototype.toString.call(obj)==='[object object]'){
		for(let key in obj){
			tmp[key]=deepClone(obj[key])
		}
	}


	return 
}

标签:tmp,面试题,obj,前端,js,deepClone,let,key,new
From: https://www.cnblogs.com/whitebuless/p/17102785.html

相关文章

  • 前端页面分页算法 js+php
    实现效果: 实现思路:通过当前选中页码数值和总页码数量,计算返回结果,以数组的形式返回。遍历数组内容,完成页面渲染。 php算法:/***getNavigatePage**@......
  • 初识Sentry前端监控
    前言今早偶尔读到方神发表了一篇sentry(一)初探 的文章,正是我最近需要的,于是自己动手丰衣足食,搭建了一个属于自己的基于Sentry的前端监控平台。为什么要做前端监控?相信每......
  • 前端报表如何实现无预览打印解决方案或静默打印
    在前端开发中,除了将数据呈现后,我们往往需要为用户提供,打印,导出等能力,导出是为了存档或是二次分析,而打印则因为很多单据需要打印出来作为主要的单据来进行下一环节的票据支撑......
  • 数组的常用方法 js 230208
    判断是否是数组头部操作头部添加头部删除尾部操作未位添加push未位删除pop排序sort方法,接收一个参数,完成排序reverse方法,反转查找indexOflastIndexOf转字符串数组拼字符串字......
  • js实现页面窗口录制
    一、在线demo1、在线demo地址:http://www.lb0125.com/videoRecord.html 注:目前测试发现只有在chrome浏览器里可以使用二、直接上代码<!DOCTYPEhtml><html><head>......
  • vue春招面试题
       一、MVVM模型●model->data数据●view->dom模型,●viewModel->视图模型,实例。相当于一个桥梁 二、Vue中响应式数据的理解  三、Vue如何检测数组变化......
  • JSP概念 原理 脚本
    JSP概念JavaServerPages:java服务端页面可以理解为:一个特殊页面,其中既可以指定定义html标签 有可以定义java代码用于简化书写原理......
  • .net core 前端获取后台的datatable数据
    [email protected]((ViewBag.Data.Tables["keyset"]asSystem.Data.DataTable).SerializeObject());快捷翻译-快到离谱!  划词翻译自动发声自......
  • js中不存在块级作用域 js 230208
    ......
  • 关于函数调用方面js的特色 js 230208
    其它弱类型语言先调用后声明会报错js的特色js支持先调用后声明......