Hi,我是,今日与君共勉!
![](https://img-blog.csdnimg.cn/img_convert/0138ab238977242bb9926e66e910b224.png)
1、深浅拷贝的区别有哪些?
要说 js 的深浅拷贝,就不得不提 js 的两大数据类型:基本数据类型和引用类型。基本数据类型的变量名和值都存储在栈中,对于引用类型的变量名存储在栈中,而值存储在堆中。由于存储方式不同,所以导致了他们复制的时候方式不同。
浅拷贝是创建一个新对象,这个对象有着原始对象属性值的一份精准拷贝。如果属性是基本类型,拷贝的就是基本类型的值,如果是引用类型,拷贝的就是内存地址,所以如果其中一个对象改变了这个地址,就会影响到另外一个对象。
深拷贝是将一个对象从内存中完整的拷贝一份出来,从内存堆中存放一个新的对象。这是两个对象,所以修改其中一个,另外一个不会受影响。
深浅拷贝主要针对的是引用类型,简单数据类型不受影响。
相关笔试题
var person = {
name:"",
hobby:['学习','敲代码','潜水']
}
function copy(source){
var newObj = new Object()
for(var i in source){
if(source.hasOwnProperty(i)){
newObj[i] = source[i]
}
}
return newObj
}
var p1 = copy(person);
p1.name = "Web Person"
console.log(person.name)
console.log(p1.name)
p1.hobby = ["内卷"]
console.info(person.hobby)
console.info(p1.hobby)
/*运行结果:
Web Person
["学习", "敲代码", "潜水"]
["内卷"]
*/
2、js 数据类型有哪些?
js 数据类型一共有 8 种,分为两大类:基本类型和引用类型。
它们的数据类型分别为:
基本类型:string、number、boolean、null、undefined、symbol、bigint
引用类型:object
相关面试题
// 注意:其他类型与数值进行相加时,其他类型的转为 number 类型
console.log( true+1 ) // 2
console.log( undefined +1 ) // NaN
console.log( null ) //object
console.log( undefined ) // undefined
3、延迟加载 js 的方式有哪些?有什么区别呢?
共有 6 种方式,分别为:
- async
- defer
- js 最后加载
- 利用 setTimeout
- 动态创建 DOM 的方式
- 使用 jQuery 的 getScript 方法
它们的区别介绍:
1、async:为
2、defer 会等到 html 解析完成之后再执行 js 代码,如果有多个脚本时,会按照顺序依次执行脚本。
<script defer type="text/javascript" src="demo1.js" ></script>
3、js 最后加载
把 js 外部引入的文件放置在页面的底部,让 js 最后加载,从而加快页面加载速度。
4、利用 setTimeout
5、动态创建 DOM 的方式
var element = document.createElement("script");
element.src = "box.js";
document.body.appendChild(element);
这种方式通过操作动态加载 js 文件,不触发的时候不加载,减少页面文件大小,加快加载速度。
6、使用 jQuery 的 getScript 方法
$.getScript( "box.js",function(){//回调函数,成功获取文件后执行的函数
console.log("脚本加载完成")
});
相关面试题:
<!doctype html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<script type="text/javascript" src="box.js"></script>
</head>
<body>
<div id="box"></div>
</body>
</html>
//box.js 代码如下
console.log( document.getElementById('box') ) // null
box.js 想正常获取元素 box ,并进行一系列操作应该如何延迟加载 js 文件呢?