什么是类数组(伪数组),如何将其转化为真实的数组?
类数组(伪数组) : (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);
- 方法三:
...扩展运算符,只能作用于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-on 与 promise 链的错误,可用于统一错误处理与错误兜底
# Vue 数据双向绑定的原理是什么?
双向数据绑定的思想就是数据层与UI层的同步,数据再两者之间的任一者发生变化时都会同步更新到另一者。
数据劫持(vue.js)
思路:使用Object.defineProperty对数据对象做属性get和set的监听,当读取属性值时,就会触发get()方法,在view中如果数据发生了变化,就会通过Object.defineProperty( )对属性设置一个set函数,当数据改变了就会来触发这个函数;
过程思路
-
实现一个监听器Observer,用来劫持并监听所有属性,如果有变动的,就通知订阅者。
-
实现一个订阅者Watcher,可以收到属性的变化通知并执行相应的函数,从而更新视图。
-
实现一个解析器Compile,可以扫描和解析每个节点的相关指令,并根据初始化模板数据以及初始化相应的订阅器。