持续更新前端面试题复习1

106 阅读2分钟

什么是类数组(伪数组),如何将其转化为真实的数组?

类数组(伪数组) : (ArrayLike)本质是个对象,和数组很像,有数组三要素index、element 、length属性,但是没有数组的方法。

常见的类数组有:

  1: 函数内置的arguments对象;

  2:通过document.documentElementAll()获取的元素,为一个HTMLCollection()集合;

  3:通过document.getElementByName()获取的元素,为一个NodeList[]集合;

类数组转为数组:

  1. 方法一: Arrray.from(ArrayLike) ES6语法

  2. 方法二: [].slice.call(ArrayLike) 或则 Array.prototype.slice.call(ArrayLike)

    let obj = {
      0: 20,
      1: 55,
      2: 67,
      3: 90,
      length: 4
    }
    // 需求: 希望伪数组也要调用数组的方法,需要把伪数组  转成  真数组

    let arr = []

    // arr.push(obj[0],obj[1],obj[2],obj[3])

    arr..slice.call(obj)
    console.log(arr);

    // Es6方式

    // 静态方法 Array.from( 伪数组 )
    let newArr = Array.from(obj)
    console.log(newArr);
  1. 方法三: ... 扩展运算符,只能作用于 iterable 对象,即拥有 Symbol(Symbol.iterator) 属性值
// 适用于 iterable 对象
[...document.querySelectorAll('li')]

怎么在组件中监听路由参数的变化

监听路由参数的变化,只能在包含含含 <router-view /> 的组件内。

  1: watch监听

watch: {
    '$route' (val, old) {
        // 当前路由
        console.log(val)
        // 上一个路由
        console.log(old)
    }
}

  2: 导航守卫监听


beforeRouteUpdate (to, from, next) {
 //这里监听
},

怎么铺获 Vue 组件的错误信息

两种方法: 1. 使用errorCaptured

当捕获一个来自子孙组件的错误时被调用。此钩子会收到三个参数:错误对象、发生错误的组件实例以及一个包含错误来源信息的。此钩子可以返回false以阻止该错误继续向上传播。

2.使用errorHandler 为全局钩子 使用 Vue.config.errorHandler 配置,接收参数与 errorCaptured 一致,2.6 后可捕捉 v-onpromise 链的错误,可用于统一错误处理与错误兜底

# Vue 数据双向绑定的原理是什么?

双向数据绑定的思想就是数据层与UI层的同步,数据再两者之间的任一者发生变化时都会同步更新到另一者。

数据劫持(vue.js)

思路:使用Object.defineProperty对数据对象做属性get和set的监听,当读取属性值时,就会触发get()方法,在view中如果数据发生了变化,就会通过Object.defineProperty( )对属性设置一个set函数,当数据改变了就会来触发这个函数;

image.png 过程思路

  1. 实现一个监听器Observer,用来劫持并监听所有属性,如果有变动的,就通知订阅者。

  2. 实现一个订阅者Watcher,可以收到属性的变化通知并执行相应的函数,从而更新视图。

  3. 实现一个解析器Compile,可以扫描和解析每个节点的相关指令,并根据初始化模板数据以及初始化相应的订阅器。

image.png