前端面试题收集(三)

1.用css的方式给按钮设置禁用

  • disabled
  • 设置鼠标不可点击 cursor: not-allowed
  • 鼠标原有的事件不能实现 pointer-events:none

2.hashchange 是什么

  • 当URL的片段标识符更改时,将触发hashchange事件 (跟在#符号后面的URL部分,包括#符号)

3.ssh协议

  • SSH协议使用加密技术确保client和server之间的连接安全
  • 所有的认证,命令,输出,以及文件传输都会被加密,加密是为了抵御来自互联网的攻击

4.防抖和节流

  • 防抖
    • 为什么会产生:当页面上下滚动的时候,页面上的数据会立马触发
    window.onscroll =function (){
       console.log('我被触发了')
     }
    
    • 怎么防抖:当事件一直被触发的时候,不执行函数,当事件触发停止一会之后,再执行函数
   let timer = null;
    window.onscroll = function () {
      if (timer) {
        clearInterval(timer)
      } 
        timer=setTimeout(() => {
          console.log('我被触发了')
        }, 200);
    }
  • 节流
    • 什么是节流
      • 当事件持续触发的时候,必须经过一段时间再执行,否则一直发送请求,会很浪费性能
    • 怎么节流
      • 当持续触发事件的时候,也要经过一段时间再触发
       function jieliu(tm, fn) {
       // 这段时间的开始时间
       let beginTime = Date.now()
       return function () {
         // 得到当前时间
         let nowTime = Date.now()
         // 得到两个时间的时间差
         let space = nowTime - beginTime
         // 判断 时间间隔是否大于等于 tm 如果大于等于了,需要执行一次函数
         if (space >= tm) {
           fn()
           // 重置开始时间
           beginTime = Date.now()
       		  }
      	 	}
         	 }
         	 		// 给页面添加滚动事件
         	 window.onscroll = jieliu(500, () => {
       		console.log('onscroll')
         	})
      

5.你对async和await的理解

  • 用来处理异步请求,即你发的异步请求,也需要像同步那样,等异步返回完结果后再往下执行
    • async

      • 异步的缩写,用来声明一个函数是异步的
    • await

      • 等待的意思,声明在异步函数的内部
    • 结果:

      • 异步代码会返回一个结果:操作完成后的结果
    • 特点:

      • 异步代码虽然是以同步的方式进行书写,但是依旧是异步执行的
      • await 修饰的对象一定要返回一个 promise 对象

代码例子 :

async getCateList() {
   // 发送到请求得到数据
   var res = await myrequest({
     url: 'https://.....'
   })
   // 解构
   let { message, meta } = res.data
   // 判断
   if (meta.status === 200) {
     this.cateNavList = message
     console.log(this.cateNavList)
   }
 }

6.解决浏览器跨域问题

  • 什么叫跨域:网络域喝浏览器有同源策略(cros),即:协议相同,域名相同,端口相同三者成立才叫同源,三者其一不同源,就是跨域
  • jsonp --只支持get,不支持post dataType: ‘jsonp’
  • 就是在程序中添加HTTP头 Response.Headers.Add("Access-Control-Allow-Origin", "*")

7.页面卡顿怎么解决

  • F12,打开控制台,找到network,再刷新网页,看那个文件加载的比较慢

8.解决浏览器的兼容问题

  • css兼容
    • 写样式的时候,加前缀如下划线_,星号*
    • 超出盒子高度就overhidden
  • web喝移动端的兼用
    • 使用响应式布局
      • flex
      • rem
  • js的兼容
    • 太多了…

9.写一个冒泡排序

let temp;
for (let i=0;i<arr.length;i++){
	for (let j=0;j<arr.length-i;j++) {
		if (arr[j]>arr[j+1]){
			temp=arr[j];
			arr[j]=arr[j+1];
			arr[j+1]=arr[j];
		}
	}
}

10.数组去重

  • set的方法
var arr1=[1,2,3,4,3,1]
   var arr2=[2,3,4]
     function getaArr(a,b){
       var obj=[]
       obj=Array.from(new Set([...a,...b]))
       return obj
     }
     console.log(getaArr(arr1,arr2))
  • 双重遍历
  function getArr(arr) {
      for (var i = 0; i < arr.length; i++) {
        for (var j = i + 1; j < arr.length; j++) {
          if (arr[i] === arr[j]) {         
            arr.splice(j, 1);
            j--;
          }
        }
      }
      return arr;
    }
    var arr = [1, 2, 3, 4, 3, 1];
    getArr(arr)
    console.log(getArr(arr))

11.对象的循环
Object.keys
作用:获取对象中所有的属性,以一个数组的形式进行展示

13.数组中常用到的方法

  • arr.concat() 连接两个数组
  • arr.jion() 用于指定字符型进行分割
  • arr.pop() 删除最后一个元素,返回一个新的对象
  • arr.push() 向尾部添加一个新的元素
  • arr.reserve() 颠倒数组的顺序
  • arr.sort() 进行排序
  • arr.splice() 删除元素,或者添加元素
  • arr.Tostrig() 转换为字符串

14.::before和:after中的双冒号和单冒号的区别

  • 单冒号: 伪类
  • 双冒号: 伪元素
  • 作用:
    • 可以在元素的前面或者后面加上指定的内容
    • 可以用来画三角形
    • 清楚浮动的影响

15.比较typeof和instanceof

  • 相同
    • 用于判断变量是否为空或者什么类型
  • 不同
    • typeof
      • 返回的值是一个字符串,用于说明类型
      • 用法 typeof(Array)!="undefined"
      • 局限性:对于Array、null等,返回的是object
    • instanceof
      • 用于判断变量是否属于某个对象的实例
      • 用法var a=new Array()
        console.log(a instanceof Array)

16.js中小数做减法会造成精度丢失

17.html中Doctype的作用
写在html的第一行,规定了浏览器支持的是html或者是xhtml格式

18.dom和bom的区别

  • Bom:是浏览器的对象模型,根本对象是window
  • Dom:是文档对象模型,根本对象是document(window.document)

19.事件冒泡和事件委托

  • 事件冒泡
    • 当元素被触发后,如果父元素也有相同的时间,就会触发事件冒泡,根据嵌套关系,一级一级向外触发,知道document.window
    • 时间冒泡的阶段:捕获阶段(1)–目标阶段(2)–冒泡阶段(3)
    • 时间委托:on机制
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值