前端基础理解

120 阅读4分钟
  1. 原始类型有哪些,null 是对象吗

    答:

    undefined null string number boolean symbol

    null 用type of 显示的是对象 但这是个bug

  2. 对象类型,除了原始类型都是对象类型,与上唯一区别就是

    存贮值得方式不同原始类型存储的就是值,对象类型存储的是指针

  3. 类型转换

    在条件判断时,除了undefine""0-0nullNaN,false 其他都为true

  4. 什么是浅拷贝,深拷贝,如何实现

    • 浅拷贝:复制对象值的一层,实现方法:Object.assign
    • 展开运算符...
    • 深拷贝:对象属性还是对象就需要使用深拷贝JOSN.parse(JOSN.stringify)缺陷是会忽略函数、symbol和undefined,不能循环引用对象,最好的解决方法是使用lodash深拷贝函数
  5. 如何理解原型和原型链

    原型:原型是一个对象,用来共享方法。

原型链: 万物皆可对象,Object构造函数的原型prototype指向Object原型(对象prototype),再用Object原型对象constructor指回Object构造函数。。。Object原型对象 __ proto __ 指向null

继承?

组合继承: 利用call改变被继承构造函数的this指向,再把参数传进去,实现继承 一般来说构造函数放一些共同的属性,原型prototype放共同的方法

如何继承方法?

Son.prototype = new Father()

  1. 什么事变量提升,什么事暂时性死区,var、let,const的区别

    变量提升就是变量还没声明就可以用只不过值为undefined。 暂时性死区,变量要在声明后用,不然会报错。var 在全局作用域下声明变量会挂载到window上其他俩个不会

  2. promise的特点?promise链?

    promise解决回到地狱问题

    无法取消promise 错误需要通过回调函数捕获

  3. async和await的特点 ?

    异步的终极解决方案,处理了then的调用链,将异步代码同步化

  4. 什么事执行栈?

    存储函数调用的栈结构,遵循先进后出

  5. 异步代码执行顺序?,什么是event loop?

    执行js代码就是往执行栈中放入函数 遇到异步代码暂时挂起,在需要执行的时候放入task队列,执行栈为空就会从task找需要执行的异步代码放入执行栈中执行,本质上来说还是同步行为

  6. call bind apply区别

    call,apply 的区别就是apply参数是素组 。都会立即调用函数

    bind 返回函数,不会立即调用

    他们都会改变this指向

  7. 什么是跨域?浏览器为什么使用同源政策?有多少种解决方法

    浏览器的同源政策,只要主机 协议 端口 有一项不同就会跨域;

    防止csrf攻击;

    jsonp 原理:利用script标签没有跨域限制的bug 兼容性不错 但是只能用get

    cors,proxy

  8. 什么是mvvm ,和mvc有什么区别

    mvc是使用控制器更新模型,但是不利于维护

    mvvm只关心数据和业务处理,model和view是相互的一方改变另一方也改变,并且view和model可以独立出来复用

  9. 什么是虚拟DOM

    本质就是在js和dom之间做了一个缓存,用js对象模拟dom树,比较俩颗虚拟树的差异把差异应用到dom树上

  10. 跨多层次组件通信

    provide/inject 无论跨多少层都能拿到数据

  11. computed watch 区别

    computed有缓存,只有计算值变化才返回内容

    watch 监听到值的变化就会执行回调 deep:true深度遍历

    这俩都支持对象写法

  12. 闭包?

    有权访问另一个函数作用域中的变量的函数

    当内部函数被保存到外部时

  13. 面向对象?

    面向对象把事务抽象成对象的概念,给对象赋属性和方法,让对象执行自己的方法,事务得到解决

  14. vue的单项数据流和双向数据绑定?

    数据是单向的,父组件传给子组件数据,子组件不能修改

    双向绑定:数据和页面的双向绑定其原理,通过数据劫持Objecti.defineProperty和发布订阅模式实现的,监听数据变化然后通知订阅者,订阅者触发相应回调

  15. 什么是类

    类就是对象的模板,对象就是类的实例 在es6之前没有类的概念,都是构造函数, 构造函数就是把对象的属性,方法抽离出来,放入这个函数。

    构造函数存在内存浪费,每次使用都要new一个新地址,所以出现构造函数原型prototype

  16. new做了什么

创建一个新对象,让this指向新对象,赋值属性和方法,返回实例对象

  1. 什么事模块化

解决命名冲突 提供复用性 提高代码可维护性

早期通过立即执行函数实现模块化