-
原始类型有哪些,null 是对象吗
答:
undefined null string number boolean symbol
null 用type of 显示的是对象 但这是个bug
-
对象类型,除了原始类型都是对象类型,与上唯一区别就是
存贮值得方式不同原始类型存储的就是值,对象类型存储的是指针
-
类型转换
在条件判断时,除了
undefine、""、0、-0、null、NaN,false其他都为true -
什么是浅拷贝,深拷贝,如何实现
- 浅拷贝:复制对象值的一层,实现方法:
Object.assign - 展开运算符
... - 深拷贝:对象属性还是对象就需要使用深拷贝
JOSN.parse(JOSN.stringify)缺陷是会忽略函数、symbol和undefined,不能循环引用对象,最好的解决方法是使用lodash深拷贝函数
- 浅拷贝:复制对象值的一层,实现方法:
-
如何理解原型和原型链
原型:原型是一个对象,用来共享方法。
原型链:
万物皆可对象,Object构造函数的原型prototype指向Object原型(对象prototype),再用Object原型对象constructor指回Object构造函数。。。Object原型对象 __ proto __ 指向null
继承?
组合继承:
利用call改变被继承构造函数的this指向,再把参数传进去,实现继承
一般来说构造函数放一些共同的属性,原型prototype放共同的方法
如何继承方法?
Son.prototype = new Father()
-
什么事变量提升,什么事暂时性死区,var、let,const的区别
变量提升就是变量还没声明就可以用只不过值为undefined。 暂时性死区,变量要在声明后用,不然会报错。var 在全局作用域下声明变量会挂载到window上其他俩个不会
-
promise的特点?promise链?
promise解决回到地狱问题
无法取消promise 错误需要通过回调函数捕获
-
async和await的特点 ?
异步的终极解决方案,处理了then的调用链,将异步代码同步化
-
什么事执行栈?
存储函数调用的栈结构,遵循先进后出
-
异步代码执行顺序?,什么是event loop?
执行js代码就是往执行栈中放入函数 遇到异步代码暂时挂起,在需要执行的时候放入task队列,执行栈为空就会从task找需要执行的异步代码放入执行栈中执行,本质上来说还是同步行为
-
call bind apply区别
call,apply 的区别就是apply参数是素组 。都会立即调用函数
bind 返回函数,不会立即调用
他们都会改变this指向
-
什么是跨域?浏览器为什么使用同源政策?有多少种解决方法
浏览器的同源政策,只要主机 协议 端口 有一项不同就会跨域;
防止csrf攻击;
jsonp 原理:利用script标签没有跨域限制的bug 兼容性不错 但是只能用get
cors,proxy
-
什么是mvvm ,和mvc有什么区别
mvc是使用控制器更新模型,但是不利于维护
mvvm只关心数据和业务处理,model和view是相互的一方改变另一方也改变,并且view和model可以独立出来复用
-
什么是虚拟DOM
本质就是在js和dom之间做了一个缓存,用js对象模拟dom树,比较俩颗虚拟树的差异把差异应用到dom树上
-
跨多层次组件通信
provide/inject 无论跨多少层都能拿到数据
-
computed watch 区别
computed有缓存,只有计算值变化才返回内容
watch 监听到值的变化就会执行回调 deep:true深度遍历
这俩都支持对象写法
-
闭包?
有权访问另一个函数作用域中的变量的函数
当内部函数被保存到外部时
-
面向对象?
面向对象把事务抽象成对象的概念,给对象赋属性和方法,让对象执行自己的方法,事务得到解决
-
vue的单项数据流和双向数据绑定?
数据是单向的,父组件传给子组件数据,子组件不能修改
双向绑定:数据和页面的双向绑定其原理,通过数据劫持Objecti.defineProperty和发布订阅模式实现的,监听数据变化然后通知订阅者,订阅者触发相应回调
-
什么是类
类就是对象的模板,对象就是类的实例 在es6之前没有类的概念,都是构造函数, 构造函数就是把对象的属性,方法抽离出来,放入这个函数。
构造函数存在内存浪费,每次使用都要new一个新地址,所以出现构造函数原型prototype
-
new做了什么
创建一个新对象,让this指向新对象,赋值属性和方法,返回实例对象
- 什么事模块化
解决命名冲突 提供复用性 提高代码可维护性
早期通过立即执行函数实现模块化