开课吧360:vue面试题

内容

1. 打开一个页面出现多少种标签?
document.getElementsByTagName('*')

  1、获取标签名映射为标签名
  2、map或者for循环
  3、map:nodelist通过展开服务变成数组再map[...document.getElementsByTagName('*')].map(v=>v.nodeName)
  > map方法将数组的所有成员依次传入参数函数,然后把每一次的执行结果组成一个新数组返回。
  4、去重
  5、for或者用es6中的new Set
  ```
  new Set([...document.getElementsByTagName('*')].map(v=>v.nodeName)).size
  ```

2. 标签出现次数统计?
[...document.getElementsByTagName('*')].map(v=>v.nodeName).reduce((obj,a)=>{ obj[a] = obj[a]?obj[a]+1:1 return obj },{}) //{HTML: 1, HEAD: 1, META: 7, TITLE: 1, LINK: 10, …}
reduce理解:
reduce方法和reduceRight方法依次处理数组的每个成员,最终累计为一个值。

function subtract(prev, cur) {
  return prev - cur;
}

[3, 2, 1].reduce(subtract) // 0
[3, 2, 1].reduceRight(subtract) // -4

3. 统计排名
1、把对象变成数组;2、排序sort;3、切片,输出数组前3

let ret = Object.entries([...document.getElementsByTagName('*')].map(v=>v.nodeName).reduce((obj,a)=>{
            obj[a] = obj[a]?obj[a]+1:1
            return obj
      },{}))
ret.sort((a,b)=>b[1]-a[1])
console.log(ret.slice(0,3))

sort:如果该函数的返回值大于0,表示第一个成员排在第二个成员后面;其他情况下,都是第一个元素排在第二个元素前面。在这里,b大于a则排前面,从大到小。

4. vue源码
github下载,src,core,instance,index.js入口(层次深入)

5. vue响应式如何实现的?
Object.defineProperty
学习:

猜你喜欢

转载自www.cnblogs.com/vera-7c/p/13169378.html
今日推荐