前端面试题

前端面试分析

css

1.盒子模型的宽度—offsetwidth

offsetwidth = content+padding+border+margin

布局的时候有时候并不希望padding会撑大原来的盒子,所以css3中推出了box-sizing的属性,默认content-box(标准盒模型),另一个属性border-box(ie盒模型也叫怪异盒模型 ,content包括padding和border)

2.相邻元素之间margin重叠

  1. 两个相邻的外边距都是正数时,折叠结果是它们两者之间较大的值。
  2. 两个相邻的外边距都是负数时,折叠结果是两者绝对值的较大值。
  3. 两个外边距一正一负时,折叠结果是两者的相加的和。

3.margin负值

margin-top为负值:向上位移

margin-bottom为负值:不会位移,而是会减少自身供css读取的高度.

margin-left为负值:向左偏移

margin-right为负值:不会位移,而是会减少自身供css读取的宽度.

4.bfc

格式化上下文,是一片独立的渲染区域,内部元素的渲染不会印象边界以外的元素

形成bfc的条件

1.float除none以外的值

2.position–absolute,fixed

3.display–inline-blck,table-cell,table-caption

4.overflow除visible以外的值

bfc的作用

解决高度塌陷的问题,清除浮动,清除浮动元素对父元素的影响,创建自适应布局(例如圣杯布局和双飞翼布局)

5.圣杯布局与双飞翼布局

圣杯布局用margin负值和float,防止中间内容覆盖用margin

双飞翼布局用margin和float,防止中间内容覆盖用padding

body{

​      margin: 0;

​      padding: 0;

​    }

​    .container{

​      padding-left: 200px;padding-right: 200px;

​      /* background-color: pink; */

​      /* overflow: auto; */

​    }

​    .container:after{

​      display: table;

​      content: '';

​      zoom: 1;

​      clear: both;

​    }

​    .container div{

​      position: relative;

​    }

​    .middle{

​      background-color: goldenrod;

​      float: left;

​      width: 100%;

​    }

​    .left{

​      background-color: aqua;

​      float: left;

​      width: 200px;

​      margin-left: -100%;

​      right: 200px;

​    }

​    .right{

​      background-color: blueviolet;

​      float: left;

​      width: 200px;

​      margin-left: -200px;

​      left: 200px;

​    }

​    footer{

​      background-color: chartreuse;

​    }

  </style>

</head>



<body>

  <header><h4>Header内容区</h4>

  </header>

    <div class="container">

        <div class="middle"><h4>中间弹11111111111111111111111111111性区</h4></div>

        <div class="left"><h4>左边栏</h4></div>

        <div class="right"><h4>右边栏</h4></div>

  </div>

  <footer><h4>Footer内容区</h4>

  </footer>

</body>

手写clearfix

xxx:after{

content:’’;

clear:both;

display:table

}

ie兼容时添加zoom:1即可

6.三色骰子

原理:flex布局

 body{margin: 0;padding: 0;}

​    .box{display: flex;justify-content: space-between;

​      

​      width: 300px;height: 300px;background-color: beige;border: 2px solid pink;}

​    .box div{width: 30px;height: 30px;border-radius: 30px;background-color: black;}

​    .box div:nth-child(2){align-self:center

​    }

​    .box div:nth-child(3){align-self:flex-end

​    }
<div class="box">
        <div> </div>
        <div></div>
        <div></div>
   </div>

6.rem

长度单位

px绝对长度单位

em相对长度单位。相对于父元素,不常用

rem行对长度单位,相对于根元素,常用语响应式布局,定义在html上根元素的大小,例如html{font-size:100px},p{0.12rem}实际大小就是100px/0.12

7.vw,vh视口的宽度和高度

screen:整个屏幕的大小

innerHtml:不包括上面下面网页框框的高度 === 100vh,vw

body.clientheight:整个内容的高度

js

1.数据类型

null是一种特殊的引用类型—typeof null —object

2.深拷贝

  • 注意判断值类型和引用类型
  • 注意判断是数组还是对象
  • 递归
function deppclone(obj){
    let cloneobj
    //判断当前数据的类型,如果是普通类型直接复制,
    if (obj && typeof obj !== 'object') {
        cloneobj = obj
    }else if(obj && typeof obj === 'object'){//当输入的内容是对象时
     //判断是数组还是对象
     cloneobj =  Array.isArray(obj) ?[]:{}

     //遍历数据对象
     for(let key in obj){
       //判断对象是否有key属性
       if(obj.hasOwnProperty(key)){
           //判断当前元素是否为对象
           if(obj[key] && typeof  obj === 'object'){
               //如果是对象的话继续遍历
            cloneobj[key] =   deppclone(obj[key])
           }else{
            cloneobj[key] = obj[key]
           }
       } 
     }
    }
    //抛出
    return cloneobj
}
 deppclone({
            x: 1,
            y: [ 5, 6, 7 ],
            z: {
                a: 0,
                b: 1
            }
            }) 

3.变量计算-类型转换

100==100//true

0==‘’//true

0==false//true

false == ''//true

null==undefined ''true



除了 == null以为,其他一律用 === 例如:
const obj = {x:100}
if(obi.a == null){}  等同于 if(obi.a === null ||obi.a === undefined  ){}   

4.class 类

是一种面向对象的语法实现,一般首字母大写

//创建类
class Top{
    constructor(name,age){
        this.name = name,
        this.age = age
    }
    setup(){
        console.log( 
            `打印 ${this.name},${this.age}`
        )
    }
}
//通过new来实例化对象
const person = new Top('覃',24)
 person.setup() 

实现jQuery

class jQuery{
    constructor(selector){
        const result = document.querySelectorAll(selector)
        const length = result.length
        for(let i=0;i<length;i++){
            this[i] = result[i]
        }
        this.length = length
    } 
    get(index){
        return this[index]
    }
     ......可以自己去实现很多方法
}

5.继承

//继承
class Secend extends Top{
    constructor(name,number){
        super(name)
        this.number = number
    }
    change(){
        console.log(`${this.name}${this.number}`)
    }
}

6.原型

每一个class都有显式原型prototype
每一个实例都有隐式原型 __proto__
实例的__proto__指向对应class的prototype

请添加图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值