一、前端js、html、css基础面试题

69 阅读1分钟

1 如何让div快速居中

flex + marigin: auto

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0
        }
        html,body {
            width: 100%;
            height: 100%;
        }
        body {
            display: flex;
        }
        .con {
            width: 200px;
            height: 200px;
            background-color: pink;
            margin: auto;
        }
    </style>
</head>

<body>
    <div class="con"></div>
</body>
</html>

2 padding 与 margin不同

作用对象不同,padding是针对自身的,margin是作用于外部对象的

3 vw与百分比区别

百分比有继承关系,会继承父级的宽;
vw只和视口宽度有关系

4 行内元素和块级元素的区别

行内元素不换行,宽高由内容决定
块级元素独占一行,宽继承自父级

5 如何让谷歌浏览器支持小字体(比如谷歌最小支持12px,如何变成6px)

transform: scale(0.5)

6 let与var

var的缺陷: 声明提升,没有局部作用域,声明覆盖,
let正好弥补上述缺陷;
        console.log(name) //lisi 声明提升
        var name = 'zs'
        function fn() {
            for(var i =0; i< 3; i++) {
            }
            console.log(i) //3 没有局部作用域
        }
        fn()
        var name = 'lisi'
        console.log(name) // lisi 声明覆盖

7 深拷贝(针对引用数据类型,数组或对象)

深拷贝以下数组:

    const list = [
           {id: 1, name: 'zs1', age: 18},
           {id: 2, name: 'zs2', age: 18},
           {id: 3, name: 'zs3', age: 18},
           function() {console.log(1)}
       ]

第一种方法:JSON.parse(JSON.stringify(list))

       const newList = JSON.parse(JSON.stringify(list));
       缺陷: 无法拷贝function函数

第二种方法:

 function deepCopy(source) {
        const targetObj = source.constructor === Array ? [] : {}
        for(let key in source) {
            if (source.hasOwnProperty(key)) {
                const value = source[key]
                if (value && typeof value === 'object') {
                    // 下面一行代码为维护性代码
                    // targetObj[key] = value.constructor === Array ? [] : {}
                    // 引用数据类型,递归
                    targetObj[key] = deepCopy(value)
                } else {
                    // 基本数据类型,直接赋值
                    targetObj[key] = value
                }
            }
        }
        return targetObj
      }

      Array.prototype.pppp = 'ppppp'
       const list = [
           {id: 1, name: 'zs1', age: 18},
           {id: 2, name: 'zs2', age: 18},
           {id: 3, name: 'zs3', age: 18},
           function() {console.log(1)}
       ]
     
       const newList = deepCopy(list)
       newList.push({id: 888})
       console.log(list)
       console.log(newList)