「这是我参与2022首次更文挑战的第21天,活动详情查看:2022首次更文挑战」
一:深拷贝浅拷贝
这里的讲的很详细,很好。blog.csdn.net/jiang770103…
浅拷贝:
浅拷贝:创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。如果属性是基本类型,拷贝的就是基本类型的值,如果属性是引用类型,拷贝的就是内存地址 ,所以如果其中一个对象改变了这个地址,就会影响到另一个对象。
浅拷贝
- Object.assign()
- Array.prototype.concat()
- Array.prototype.slice()
let arr1 =[1,2,3]
let arr2 = arr1//这是最简单的浅拷贝
深拷贝:
会拷贝所有的属性,在堆空间中,重新分配内存,拷贝出一份一模一样的数据。原数据和新数据之间不会互相影响。因为他们拥有不同的堆地址。
深拷贝
- JSON.parse(JSON.stringify())
- 递归
- 函数库lodash
- jquery中的$.extend();
总结:浅拷贝的是地址,栈里的数据,深拷贝能拷贝到堆里的数据。
常见的浅拷贝:Object.assign,等号赋值,展开运算符
常见的深拷贝:json,递归,lodash
二:组件中的data为什么要定义成一个函数而不是一个对象?
每个组件都是 Vue 的实例。组件共享 data 属性,当 data 的值是同一个引用类型的值时,改变其中一个会影响其他
三:常见的盒子垂直居中的方法有哪些请举例3种?
1.利用子绝父相定位的方式来实现
#container{
width:500px;
height:500px;
position:relative;
}
#center{
width:100px;
hight:100px;
position: absolute;
top: 50%;
left: 50%;
margin-top:-50px;
margin-left:-50px;
}
2.利用Css3的transform,可以轻松的在未知元素的高宽的情况下实现元素的垂直居中。
#container{
position:relative;
}
#center{
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
3.flex
#container{
display:flex;
justify-content:center;
align-items: center;
}
#center{
}
4.padding和margin