1.JS基础数据类型? 分为原始数据类型和引用数据类型 原始数据类型包括:
- Number – String - Boolean – Null - Undefined
引用数据类型:
- Object (对象) - Array(数组)- function(函数)
2.为什会分为原始和引用?区别是什么? 区别 (1). 存储位置不同 原始数据类型存储在栈中,占空间小,大小固定,属于频繁使用的数据。 引用数据类型存储在堆中,占空间大,大小不固定,属于不频繁使用的数据。 (2). 传值方式不同 原始数据类型 按值传递,无法改变一个原始数据类型的值; 引用数据类型 按引用(地址)传递,引用数据类型值可以传递; 3.undefined和not defined的区别? undefined: 表示变量定义未赋值 not defined:表示变量未定义
4.你一般用什么办法判断一个变量是什么数据类型? typeof运算符,用来检测一个变量的类型。
5.什么是精度丢失?是怎么造成的? JS 采用的是浮点数标准需要对这种无限循环的二进制进行截取,从而导致了精度丢失 浮点型变量在进行计算的时候会出现丢失精度的问题 进行浮点数运算的时候,会出现丢失精度的问题 可以使用Java中的BigDecimal类来解决这类问题 BigDecimal(String)构造器创建对象才有意义 一般使用BigDecimal来解决商业运算上丢失精度的问题的时候,声明BigDecimal对象的时候一定要使用它构造参数为String的类型的构造器。 同时这个原则Effective Java和MySQL 必知必会中也都有提及。float和double只能用来做科学计算和工程计算。商业运算中我们要使用BigDecimal。
6.你都用过哪些js常用得方法?举个具体得例子? forEach Map Push….
7.JavaScript中使用forEach会改变原来的数组吗? 不对原来数组进行修改,但是可以自己通过数组的索引来修改原来的数组
8.foreach和map的区别?
区别:
forEach()方法不会返回执行结果,而是undefined。forEach() 被调用时,不会改变原数组,也就是调用它的数组(尽管 callback 函数在被调用时可能会改变原数组)。
map()方法会分配内存空间存储新数组并返回(有return),map 不修改调用它的原数组本身(当然可以在 callback 执行时改变原数组)
9.数组去重你的思路是什么?几个方法?
(1). 双循环----双重循环 + splice (返回修改后的参数数组)
(2). 单循环+indexof`----新建一个只有原数组第一项的新数组 + 循环原数组 + indexof判断每 项是否在新数组中已经存在,不存在则推入新数组
(3). sort排序后循环数组 + 相领元素比较
(4). 利用判断对象属性是否存在的方法 + 新数组
(5). 使用ES6的 Set方法 (new Set())
10.谈谈对作用域的理解?都有什么作用域? 包括: 全局作用域:最外层函数 和在最外层函数外面定义的变量拥有全局作用域,所有末定 义直接赋值的变量自动声明为拥有全局作用域 函数作用域:是指声明在函数内部的变量,和全局作用域相反,局部作用域一般只在固定的代码片段内可访问到,最常见的例如函数内部。 块级作用域:块级作用域可通过新增命令 let 和 const 声明,所声明的变量在指定块的作用域外无法被访问。 理解: 作用域是在运行时代码中的某些特定部分中变量,函数和对象的可访问性。换句话说,作用域决定了代码区块中变量和其他资源的可见性 作用域就是一个独立的地盘,让变量不会外泄、暴露出去。也就是说作用域最大的用处就是隔离变量,不同作用域下同名变量不会有冲突
11.谈谈对this关键字的理解?
全局的 this → 指向的是 Window
对象中的 this → 指向其本身
事件中 this → 指向事件对象
12.什么是闭包?为什么要用闭包?优缺点? 概念:定义在一个函数内部的函数 作用:可以读取函数内部的变量,让变量的值始终保持在内存中,不会调用后被自动清除 优缺点: 优点:避免长期驻扎在内存中 避免全局变量的污染 私有成员的存在 缺点:使用不当容易造成内存泄露
13.原型链的理解?原型链继承的理解 原型概念: 所有对象都有一个私有的 proto 属性,而这个属性所对应的就是自身的原型; 原型链概念: 所有对像都有一个私有的 proto 属性,而这个属性所指向的就是原型对象,它的原型对象又会有自身的原型对象,层层向上直至原型对象为null,那么这一过程就形成原型链; 原型链继承: 就是将一个类(父类)的实例赋值给另一个类(子类)的原型对象。这样的话子类的实例便能够调用到父类的属性和方法
14.dom和bom的区别? 文档对象模型 (DOM):处理网页内容的方法和接口
浏览器对象模型(BOM):与浏览器交互的方法和接口
15.缓存localstronge和sessionstronge有啥区别? LocalStorge: localStorage的生命周期是永久性的,也就是说使用localStorage存储数据,数据会被永久保存,数据不会因为窗口或浏览器的关闭而消失,除非主动的去删除数据 sessionStorage: sessionStorage的生命周期相比localStorage来说很短,其周期在窗口关闭时结束。也就是说,当浏览器窗口关闭,sessionStorage的使命就已经结束,其保留的数据也会被清除
16.vue的生命周期?生命周期的作用? 生命周期: 创建: 1、beforeCreate:这个阶段实例已经初始化,只是数据观察与事件机制尚未形成,不能获取DOM节点(没有data,没有el) 使用场景:因为此时data和methods都拿不到,所以通常在实例以外使用 2、created:实例已经创建,仍然不能获取DOM节点(有data,没有el) 使用场景:模板渲染成html前调用,此时可以获取data和methods,so 可以初始化某些属性值,然后再渲染成视图,异步操作可以放在这里 加载: 1、beforeMount:是个过渡阶段,此时依然获取不到具体的DOM节点,但是vue挂载的根节点已经创建(有data,有el) 2、mounted:数据和DOM都已经被渲染出来了 使用场景:模板渲染成html后调用,通常是初始化页面完成后再对数据和DOM做一些操作,需要操作DOM的方法可以放在这里 更新: 1、beforeUpdate:检测到数据更新时,但在DOM更新前执行 2、updated:更新结束后执行 使用场景:需要对数据更新做统一处理的;如果需要区分不同的数据更新操作可以使用$nextTick 销毁: 1、beforeDestroy:当要销毁vue实例时,在销毁前执行 2、destroyed:销毁vue实例时执行
17.v-show,v-if区别? 区别: v-show是css方式以display none的方式来控制元素显示隐藏 v-if通过JS的方式直接删除或添加元素
18.vue常用的开发指令? 常用指令:v-if v-show v-for v-model v-text v-html
19.路由跳转的方式? 方式一:path路径跳转 传值可以使用params和query传值,不能传引用数据类型 方式二:命名式路由跳转 传值可以使用params和query传值,可以传基本数据类型和数组,对象 方式三:编程式路由跳转 传值可以使用params和query传值,可以传基本数据类型和数组,对象
20.MVVM? Model:代表数据模型,数据和业务逻辑都在Model层中定义; View:代表UI视图,负责数据的展示; ViewModel:负责监听Model中数据的改变并且控制视图的更新,处理用户交互操作; 总结:简单来说,就是数据发生改变,视图层也会发生改变
21.Vue 组件中 data 为什么必须是函数? data是一个函数时,每个组件实例都有自己的作用域,每个实例相互独立,不会相互影响。
22.父子通讯? 父子通讯:在父组件中,用 v-bind 动态绑定一个自定义属性,用于给子组件传递数据 在子组件中,使用 props 接收父组件传过来的数据。 子父通讯:子组件通过事件的方式,利用 emit 的第一个参数是父组件自定义事件的方法名,后边的 “value” 是子组件要给父组件传递的数据
23.路由守卫? Vue-Router路由钩子函数(导航守卫) 路由钩子函数有三种: 1:全局钩子: beforeEach、 afterEach 2:单个路由里面的钩子: beforeEnter、 beforeLeave 3:组件路由:beforeRouteEnter、 beforeRouteUpdate、 beforeRouteLeave
全局守卫
router.beforeEach() 进入之前触发
router.afterEach() 进入之后触发 每个守卫方法接收三个参数:
①to: Route: 即将要进入的目标路由对象(to是一个对象,是将要进入的路由对象,可以用to.path调用路由对象中的属性)
②from: Route: 当前导航正要离开的路由
③next: Function: 这是一个必须需要调用的方法,执行效果依赖 next 方法的调用参数。
24.vuex是什么?怎么使用?哪种功能场景使用它? vuex是: Vuex 是一个专为 Vue.js 应用程序开发中管理的一个模式。
通过创建一个集中的数据存储,方便程序中的所有组件进行访问
五个核心属性:
state状态、 getter计算属性、 mutation改变状态、 action异步操作、 module模块
总结:Vuex就是状态管理工具,数据管理工具
使用场景:(1)登录信息、(2)购物车、(3)复杂的组件通信
25.让一个元素垂直居中有啥方法? 方法一:利用padding内边距 方法二:利用line-height行间距 方法三:利用display的table-cell,使其变成具有表格的属性,则在此时可以利用vertical-align:middle。 方法四:利用relative和absolute相对和绝对定位,通过计算距离父元素上边距和左边距的距离来对子元素进行定位 此时要给元素加上行标签
方法五:利用flex弹性布局,webkit内核的浏览器,要加上-webkit,设置为flex布局后,子元素的float、clear和vertical-align属性将失效。而align-items属性定义项目在交叉轴上如何对齐,flex-start是顶端对齐,flex-end是底端对齐,center则为垂直居中,stretch为全部充满,baseline为在一个基准线上
26.怪异盒子和标准盒子? 一个盒子的组成分为:内容,内边距,边框,外边框 怪异盒模型:在已设定的宽高内