1、js的基本数据类型和引用数据类型分别是那些 基本数据类型 number数值 undefined未定义 null空 string字符串 boolean布尔值 smybol 符号 引用数据类型 object对象 array数组 function 函数
2、null 和undefined的区别 定义不同。undefined是所有没有赋值变量的默认值,;null是主动释放一个变量引用的对象,表示一个变量不再指向任何对象地址。 用法不同。undefined表示“缺少值”,即此处应该有一个值,但是还没有定义;null表示“没有对象”,即该处不应该有值。 Number转换的值不同。Number(null)输出为0,Number(undefined)输出为NaN。 if判断语句中,两者都会被转换为false。
3、普通函数和箭头函数的区别 外形不同:箭头函数使用箭头定义,普通函数中没有。 箭头函数全都是匿名函数:普通函数可以有匿名函数,也可以有具名函数。 箭头函数不能用于构造函数:普通函数可以用于构造函数,以此创建对象实例。 箭头函数中 this 的指向不同。 箭头函数不具有 arguments 对象:每一个普通函数调用后都具有一个 arguments 对象,用来存储实际传递的参数,但是箭头函数并没有此对象。
4、说一说你们理解的闭包 闭包让开发者可以从内部函数访问外部函数的作用域。 闭包只是在形式和表现上像函数,但实际上不是函数。
5、vue2的生命周期都是什么 beforeCreate:实例创建之前。 created:实例创建之后。 beforeMount:组件挂载之前。 mounted:组件挂载之后。 beforeUpdate:数据改变,视图更新之前。 updated:数据改变,视图更新之后。 beforeDestroy:组件销毁之前。 destroyed:组件销毁之后。
6、created和mounted的区别 created:在模板渲染成html前调用, mounted:在模板渲染成html后调用,
7、vue组件的通信方式 props:父组件通过props向下传递数据给子组件,子组件通过props接收数据。 emit向父组件发送消息,父组件通过on监听子组件的消息。 兄弟传值 Vuex通信:父子组件通过Vuex进行通信。
8、了解nextTick吗,为什么要用nextTick 减少无用渲染 。如果是同步更新,多次对一个或多个属性赋值,会频繁触发UI/DOM的渲染。 避免无用功 。由于VirtualDOM的引入,每一次状态发生变化后,状态变化的信号会发送给组件,组件内部使用VirtualDOM进行计算得出需要更新的具体的DOM节点,然后对DOM进行更新操作,每次更新状态后的渲染过程需要更多的计算,而这种无用功也将浪费更多的性能。
9、vuex有哪几种属性 state:用来存储变量。 getter:对state里面的变量进行过滤。 mutation:提交更新数据的方法,必须是同步的。 action:actions提交的是mutations,而不是直接变更状态;actions可以包含任意异步操作。 module:模块化vuex
10、元素水平垂直居中的方法 使用flex布局。将要居中的元素的父容器设置为display:flex,并使用justify-content:center和align-items:center来使其水平和垂直居中。 使用text-align:center。将要居中的元素设置为display:inline-block,并将其父容器的text-align属性设为center,使其水平居中。 使用position属性。将要居中的元素设置绝对或相对定位,并将其父容器的position属性设为absolute或relative,使其垂直居中。 使用transform属性。将要居中的元素设置transform:translate(-50%,-50%),使其水平和垂直居中。
11、es6新增语法 let、const: 箭头函数: 模块化: 解构赋值: Promise: class:类 剩余参数和展开表达式 模板字符串
12、说一说你对原型链的理解 原型链是JavaScript中对象之间继承关系的一种实现方式。每个JavaScript对象都有一个原型对象,而这个原型对象也有其自身的原型,这样一层一层,直到某个对象的原型为null,形成了一条原型链。
13、js中常用的数据类型检测方法 typeof 运算符:这是一个简单的运算符,可以用来检测变量或值的类型 instanceof 运算符:这个运算符用于检测构造函数的 prototype 属性是否出现在对象的原型链中的任何位置 Array.isArray() 方法:这个方法专门用来检测一个值是否是数组。 使用Object.prototype.toString方法:这个方法可以用来检测对象的类型,包括数组和null
14、v-for 为什么要加:key 值 给被循环的元素添加一个唯一值,vue会根据key重新排列dom的顺序
15、v-if和v-show的应用场景和区别 如果多次使用 用v-show 用的少用v-if v-if是把元素注销重新渲染,v-show是改变元素的display属性
16、为什么要使用计算属性 减少模板中的计算逻辑 。 数据缓存:计算属性是基于缓存实现的,只在计算属性所依赖的数据发生改变时它们才会重新求值,否则访问计算属性会立即返回之前的计算结果,而不会再次执行函数。 提高性能 。
17、css3新增属性 border-radius:CSS3圆角边框。 box-sizing:改变盒模型的模式。 font-face:设置服务器端字体。 overflow:溢出。 background-position:规定背景图像的位置。 border-image:CSS3边框图片。 text-shadow:在CSS3中,text-shadow可向文本应用阴影。 background-size:属性规定背景图片的尺寸。 background-origin:属性规定背景图片的定位区域。 matrix():CSS3 2D转换。 CSS3 3D转换。
18、html新增属性 为a与area元素增加media属性 为area元素增加hreflang属性与rel属性 为input(type=text)、button、select和textarea元素增加 为input(type=text)和textarea元素增加placeholder属性 为input、output、button、select、textarea、和fieldset增加form属性 为input元素增加多个新属性 为button元素增加多个新属性 为fieldset元素增加disabled属性
19、css 盒模型的理解 盒模型由三个部分组成,分别是 content(内容)、padding(填充区)、border(边框)和
20、css选择器的优先级 CSS选择器的优先级为: !important、行内样式、ID选择器、类选择器、标签选择器、通配选择器
21、异步请求适合在哪个生命周期调用 Vue 的 created 生命周期在实例创建之后立即调用,可以在此时使用异步请求获取初始化数据,以便后续的数据渲染。在 created 生命周期中调用
22、谈谈你对作用域插槽的理解、 作用域插槽是带数据的插槽,子组件提供给父组件的参数,父组件根据子组件传过来的插槽数据来进行不同的数据渲染
23、== 和 === 全等的区别 ==判断两个变量或值是否相等 不判断数据类型 ==判断两个变量或值是否相等和判断数据类型是否相等
24、清除浮动的方式有哪些 overflow:hidden; clear:both 父元素也浮动
25、谈谈你对bfc的理解 什么是bfc:BFC是一个独立的空间,里面子元素的渲染不影响外面的布局 作用:解决margin塌陷、清除浮动 如何出发bfc: overflow: hidden、display: inline-block / table-cell / flex、position: absolute / fixed
26、css中LInk和import的区别 加载顺序:加载页面时,link标签引入的css被同时加载;import引入的css将在页面加载完毕后被加载 兼容性:import只能在IE5以上才能识别,link标签作为html元素,不存在兼容性问题 Dom可控性,科技通过js操作dom,插入link标签来改变样式;有与dom方法是基于文档的,无法使用import的方式插入样式
27、0.1+0.2为什么不等于0.3 0.1 + 0.2 的实际值非常接近于 0.3,但并不完全等于 0.3。实际上0.3 是一个近似值。
28、vue双向绑定的原理 vue双向绑定是指数据和视图同步,数据发生变化,视图跟着变化,试图变化,数据也随之发生改变
29、如何理解vue的响应式系统 vue的响应式系统是指能够是指能够使数据发生变化可被检测并且对这种变化做出响应的机制
30、对MVVM和mvc的理解 MVVM是model-view-veiwModel的缩写,本质上就是mvc的改进版 mvc全名是model view controller,是模型(model)试图(view)控制器(controller)的缩写,是一种软件设计典范
31、什么是jsx jsx是一种JavaScript的语法扩展,其格式比较像是模板语言,但事实上完全是在JavaScript内部实现的 jsx就是用来声明react当中的元素,是构成react应用的最小单位,但实际开发中,jsx在产品打包阶段都已经编译成JavaScript,不会带来任何副作用,反而会让代码更加直观并易于维护
32、你知道哪些布局方式 弹性布局 流式布局 自适应布局 响应式布局 固定布局
33.如何改变this指向 使用call或apply 使用bind 使用箭头函数
34.数组的常用方法 length数组的长度 sort对数组进行排序 push向数组末尾添加一个元素 pop删除并返回数组的最后一个元素 shift删除并返回数组的第一个元素 unshift向数组开头添加一个元素 splice向数组添加删除元素 slice选取数组的一部分,返回一个新数组 join向数组的所有元素连接到一个字符串中 concat合并两个或更多的数组,此方法不会更改先有数组,而是返回一个新数组 map对数组中的元素执行一个函数,并返回执行函数后的新数组 filter创建一个新数组,包含通过所提供函数实现的测试的所有元素 forEach 遍历数组
35.http和https的区别 http和https是两种不同的网络协议,其中http是超文本传输协议的缩写,而https是以安全为目标的http通道 安全性不同 应用领域不同 连接方式不同
36.什么是防抖和节流 防抖:防抖是在一定时间内,如果事项触发时间,则只执行最后一次,并忽略前面所有事件,通常在输入框时搜索等场景,减少不必要的处理 节流:节流是在一定时间内,只执行一次事件。这个时间间隔内无论事件触发了多少次,都只执行一次,通常用在滚动事件,resize事件等,以防事件处理不过来
37.http状态码 1开头:临时响应需要请求者继续执行操作码的状态码:100(继续),101(切换协议) 2开头:请求成功:200(成功处理了请求),201(请求成功并且服务器创建了新的资源),202(服务器已经接受请求,但尚未处理) 3开头:重定向:301(永久移动),302 (临时移动), 4开头:客户端错误:400(语义有误),401(当前用户需要用户验证),403(服务器已经理解请求,但是他拒绝执行他),404(请求失败) 5开头:服务器错误
38.什么是块级作用域 块级作用域是(ES6)中引入的概念,一个大括号就是一个块级作用域
39.你如何理解promise Promise是JavaScript中用于异步编程的一种模式。它提供了一种方式来处理异步操作,使得异步操作的结果可以在未来某个时间点获取。 Promise对象代表了一个异步操作的最终完成(或失败)及其结果值
40.什么是宏任务微任务?有什么区别? 微任务:promise,async,await 宏任务:setTimeout,setinterval,Ajax,dom事件 区别:先执行微任务,后执行宏任务
41.js有哪些内置对象 number,string,boolean,array,date,Math,RegExp,json