前端问题小十五道
- “能跨越的高墙 都会成为自己的盾牌”放松小文案
- 1、ES6的新特性有哪些,举例说明。
- 2、写出原生ajax发送请求的过程(fetch或者xhr都可以)
- 3、js中new操作符做了哪些事情
- 4、写出移动端如何适配
- 5、写出本地存储和cookie的区别
- 6、说一下对proxy的理解
- 7、vue组件通信的方式
- 8、vue中data为什么要是函数返回对象的形式
- 9、vuex中如何实现数据持久化(数据刷新不掉)
- 10、vue中数据是对象或者数组的时候,数据发生变化页面不更新,什么原因,如何解决
- 11、vue是如何实现数据双向绑定的
- 12、写出什么是插槽,以及插槽的分类,分别在什么情况下使用
- 13、vue中遍历输出一般要绑定key 请解释绑定key的目的是什么?绑定的key需要注意哪些点?
- 14、什么是jsx,使用jsx语法有什么好处。
- 15、React种如何改变组件状态?(代码说明)为什么不直接更新state状态
“能跨越的高墙 都会成为自己的盾牌”放松小文案
1、ES6的新特性有哪些,举例说明。
1.块作用域构造Let and Const
一个声明变量,一个声明常量
let a=1; const A=1
2.箭头函数
()=>{}
3.默认参数
function Person(x=10,y=20){
this.x = x;
this.y = y;
}
4.模板对象(模板字符串)
(1)简化字符串的拼接
(2)模板字符串必须要(``)包含
(3)变化的部分使用${XXX}定义
5.解构赋值
1、理解:
从对象或数组中提取的数据,并赋值给变量(多个)
2、对象
let{n,a} = {n:"小涛涛",a:18};
数组
let[a,b] = [1,"国产007"];
3、用途:给多个形参赋值
6.多行字符串
7.增强的对象文本
8.Promises
1-Promise:代表了未来某个将要发生的事件(通常就是一个异步操作)
2-可以将异步操作以同步流程表达出来,避免了层层嵌套的回调函数
3-Es6的promise是一个构造函数,用来生成promise实例
4-使用promise基本步骤(2)
(1)创建promise 对象
①Let promise = new Promise((resolve,reject)=>{
1)初始化 promise的状态行为pending
2)If(异步操作成功){
a.Resolve(value)//修改promise 的状态为 fullfilled
3)}else{
a.Reject(errMeg)//修改premise的状态为 rejected
4)}
②})
(2)调用promise 的then()
(3)Promise.then(function(){
①Result => console.log(result);
②errMag =>alert(errMag);
(4)})
(5)Promise对象分为三种状态
①Pending 初始化状态
②Fullfilled 成功状态
③Rejected失败状态
9.类Class
10.Modules
11.Symbol
2、写出原生ajax发送请求的过程(fetch或者xhr都可以)
//readyState
0: 请求未初始化
1: 服务器连接已建立
2: 请求已接收
3: 请求处理中
4: 请求已完成,且响应已就绪
var xml=null
if(window.XMLHttpRequest){
xhr=new XMLHttpRequest()
}else{
xhr=new ActiveXobject("microsoft.XMLHTTP")
}
xhr.open("get",地址,true)
xhr.send()
xhr.onreadystatechange=function(){
if(xhr.readyState==4&&xhr.status==200){
}else{}
}
3、js中new操作符做了哪些事情
new操作符新建了一个空对象,这个对象原型指向构造函数的prototype,执行构造函数后返回这个对象
1.创建一个空对象
2.这个对象的原型指向构造函数的prototype
3.绑定this指向,执行构造函数
4.确保返回的是对象
4、写出移动端如何适配
rem 布局
vw/vh 布局
百分比布局
响应式布局
px 为主,搭配 vw/vh、媒体查询与 flex 进行布局
· 编写 <meta> 标签设置 viewport 的内容 width=device-width,让网页宽度等于视窗宽度
· 在 css 中使用 px
· 在适当的场景使用flex布局,或者配合vw进行自适应
· 在跨设备类型的时候(pc <-> 手机 <-> 平板)使用媒体查询
· 在跨设备类型如果交互差异太大的情况,考虑分开项目开发
5、写出本地存储和cookie的区别
本地存储和 Cookies 区别在于
存储大小,本地存储官方说法是 5M 的大小,然而 Cookies 的存储大小更小并且和浏览器本身有关(大概在 4000个字节左右)
Cookie 存储的内容会保留在 HTTP 请求的 Header 中,并且会随每次请求发送到浏览器;然而本地存储只会保留在客户端,浏览器请求过程不会发送到服务端
6、说一下对proxy的理解
Proxy可以理解成,在目标对象之前架设一层“拦截”,外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写。Proxy 这个词的原意是代理,用在这里表示由它来“代理”某些操作,可以译为“代理器”
7、vue组件通信的方式
1.父向子,父通过强制绑定bind传数据,子通过props接受
2、子向父,通过$emit触发自定义事件来传值
3.利用eventBus方式,可以实现平级组件之间的通信(有内存泄漏问题)
4、ref
8、vue中data为什么要是函数返回对象的形式
如果data是对象的话,由于对象是引用类型,组件被复用的话,就会创建多个实例。本质上这些实例,都是同一个构造函数,为了避免组件之间的data冲突,data必须是一个函数。
9、vuex中如何实现数据持久化(数据刷新不掉)
为了防止刷新数据丢失,可以将一些数据保存在localstorage、sessionstorage或cookie中,可以保证页面刷新数据不丢失且易于读取。
10、vue中数据是对象或者数组的时候,数据发生变化页面不更新,什么原因,如何解决
原因:data外更改的数据在数组里的索引是获取不到的
解决:第一种修改对象的某一属性
第二种修改数组对象的某一属性
11、vue是如何实现数据双向绑定的
vue.js是采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调来渲染视图。
12、写出什么是插槽,以及插槽的分类,分别在什么情况下使用
插槽有分类
1.匿名插槽:没有名字的插槽
2.具名插槽:有名字(name属性)的插槽
3.作用域插槽:子组件中的数据只能子组件访问到,但是我们的插槽往往定义在父组件中,这个时候就需要作用域插槽来打通他们之间的关系,然后就能在父组件中愉快的使用子组件的数据了
什么时候使用插槽:当子组件被复用时,需要在特定的区域展示不同的定制化的内容。
13、vue中遍历输出一般要绑定key 请解释绑定key的目的是什么?绑定的key需要注意哪些点?
key唯一标识符定义不同的key值,告诉虚拟dom两个元素不一样可以直接替换了,列表过渡必须要有key如果两个相同的元素切换,会发现不能触发过渡效果,这是因为vue里面的diff算法和虚拟dom的元素,可以使用key=‘’设置不同的值来解决
14、什么是jsx,使用jsx语法有什么好处。
JSX 是 JavaScript 的一种扩展,为函数调用和对象构造提供了语法糖,特别是 React.createElement()。JSX和模板引擎或 HTML相似,但它不是。JSX 生成 React 元素,同时允许充分利用 JavaScript 的全部功能。
JSX优点:
开发人员体验代码:更易读,更形象,类 XML 语法可更好地表示嵌套的声明式结构。
非正式开发人员:可更容易修改代码,因 JSX 类似HTML
减少语法错误,开发人员代码量变少,
15、React种如何改变组件状态?(代码说明)为什么不直接更新state状态
changeWeather(){//该方法挂到了原型上
console.log(this,'this指向')
this.setState({
isHot:!this.state.isHot
})
}
为什么不直接更新state状态:
直接修改state,reatc不会重新render,并且setState的更新是异步操作,因此状态更改可能在以后的时间点发生并且放在一个更新队列,将队列内的值一起改变并且一次 render,在改变state时候,需要重新生成一个对象取代替原来的 state,而不是直接修改原来的 state
概述:以上大体每个块都有的问题,移动端,ES6,Vue,React。想要了解jquery的话请持续关注