前端面试题(六)

109 阅读2分钟

「这是我参与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