版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/vivian_1122/article/details/88773590
1.实现跨域的方式
1. jsonp
2. 设置document.domain
3. 设置window.name
4. window.postMessage
2.typeof
typeof({},[],null) => object;
typeof(NaN) => number;
typeof(undefiend)=>undefiend
typeof('dsasdasd'*1) => number
3.定位
relative
相对于最近的父级不管父级的定位方式
absolute
相对于最近的absolute或者relative的父级
4.浏览器本地存储(cookie、localStorage、sessionStorage)
cookie在浏览器请求中每次都会附加请求头中发送给服务器。大小不能超过4k
localStorage保存数据会一直保存没有过期时间,不会随浏览器发送给服务器。大小5M或更大
sessionStorage仅当前页面有效一旦关闭就会被释放。也不会随浏览器发送给服务器。大小5M或更大
5.CSS3有哪些新特性
CSS3实现圆角(border-radius),
阴影(box-shadow),
对文字加特效(text-shadow、),
线性渐变(gradient),
旋转(transform)transform:rotate(9deg) scale(0.85,0.90) translate(0px,-30px) skew(-9deg,0deg);//旋转,缩放,定位,倾斜
*增加了更多的CSS选择器 多背景 rgba
6.html5有哪些新特性
语义化更好的内容标签(header,nav,footer,aside,article,section),
音频、视频API(audio,video),
画布(Canvas) API,
本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失;
sessionStorage 的数据在浏览器关闭后自动删除
7.javascript继承的6种方法
原型链继承
借用构造函数继承
组合继承(原型+借用构造)
原型式继承
寄生式继承
寄生组合式继承
8.GET和POST的区别,何时使用POST?
GET:一般用于信息获取,使用URL传递参数,对所发送信息的数量也有限制,一般在2000个字符
POST:一般用于修改服务器上的资源,对所发送的信息没有限制
Get是通过地址栏来传值,而Post是通过提交表单来传值。。
9.vue
vue对监听对象新增属性无法触发视图更新,更改数组下标也无法触发视图更新,只能通过vue.set实现
v-for的优先级比v-if的高
v-show适合频繁切换的条件,v-if适合渲染次数不多的
computed计算属性是基于它们的依赖进行缓存的,watch适合异步
vue实现原理
vue是双向绑定的,典型的订阅者模式,通过Obeject.defineProperty()来监听数据的变动,
这个函数内部可以定义setter和getter,每当数据发生变化,就会触发setter。
这时候Observer就要通知订阅者,订阅者就是Watcher。底层用的是diff算法。
Vue生命周期
beforecreate : 举个栗子:可以在这加个loading事件
created :在这结束loading,还做一些初始化,实现函数自执行
beforeMounted: 加载完成之前
mounted : 在这发起后端请求,拿回数据,配合路由钩子做一些事情
beforeDestroy: 你确认删除XX吗? destroyed :当前组件已被删除,清空相关内容。
destroy: 组件被删除
Vue中Watch 和 computed 的区别
computed是计算属性,适合逻辑比较复杂的情况下使用,依赖的数据没有变化时直接读取上次计算的值返回
Watch理解为实时计算的每次都会计算一次开销较大,适合异步操作用
10.promise
promise一是同步注册事件,二异步触发链式调用。
promise会把需要链式调用的方法都放到一个事件存储器中。
resolve执行一次会从事件存储器中调用一次,
如果rejected(错误)就会执行注册的rejected事件。
promise三种状态:
pending: 初始状态(理解为待执行)
fulfilled: 成功的操作(resolve操作).
rejected: 失败的操作.(rejected操作)
11.let和const区别
let与const都是只在声明所在的块级作用域内有效。
let声明的变量可以改变,值和类型都可以改变,没有限制
12.js内置对象有哪些?
什么是内置?就是不用声明,可以直接用的;
Arguments 函数参数集合
Array 数组
Boolean 布尔对象
Date 日期时间
Error 异常对象
Function 函数构造器
Math 数学对象
Number 数值对象
Object 基础对象
RegExp 正则表达式对象
String 字符串对象
document
Global 对象
13.js变量按照存储方式有哪些类型?
1.值类型
2.引用类型(节省空间,公用内存块)
区别:值类型改变一个不会影响其他的,引用类型改变都改变,因为公用内存块
14.js里的数据类型有哪些?
1.number:任意的数字。
2.string:任意的字符串。
3.boolean:只有两个值,true和false。
4.null:只有一个值,null。
5.undefined:只有一个值,undefined。
6.对象类型(object):function,array等。
7.Symbol:ES6 引入了一种新的原始数据类型,表示独一无二的值。
15.数组的常用方法有哪些?
push:向数组的末尾增加一项 返回值是数组的新长度
unshift:向数组开头增加一项 返回值是数组的新长度
pop:删除数组的末尾项 返回值是删除的数组项
shift:删除数组开头项 返回被删除的开头项目
splice:删除数组中的任意项 返回值是被删除的数组项
slice:复制数组 返回值是复制到的新数组 写上数值之后 不包含被复制的最后一项
拼接:
concat:把一个数组和另一个数组拼接在一起 返回拼接好的数组
join:把数组中的每一项 按照指定的分隔符拼接成字符串
排序:
reverse:倒序数组 返回值倒序数组 原有数组改变
sort:根据匿名函数进行冒泡排序 b-a倒序 a-b升序
兼容性不好:
indexOf:返回获取项在数组中的索引
lastIndexOf:返回获取项在数组中出现的最后一次索引
forEach: 循环遍历数组 参数是一个匿名函数 默认返回为undefined
map:循环遍历数组 参数是一个匿名函数
16.flex布局
<!--html-->
<div id="dv">
<div id="box1"></div>
<div id="box2"></div>
<div id="box3"></div>
</div>
<!--css-->
body{
margin: 0;
padding: 0;
}
#box1,#box2,#box3{
width: 200px;
height: 200px;
}
#box1{
background-color: pink;
}
#box2{
background-color: yellow;
}
#box3{
background-color: green;
}
#dv{
display: flex;
justify-content: space-around;
}
justify-content 常用属性有:flex-start | flex-end | center | space-between | space-around
前三个字面意思;
space-between:第一个元素的位置与行起始位置对其,最后一个元素与行结束位置对其,中间的剩余空间平均分布;
space-around:弹性盒子元素会平均地分布在行里,两端保留子元素与子元素之间间距大小的一半;
space-evenly:均匀排列每个元素,每个元素之间的间隔相等;
17.简述typeof 与 intanceof 的功能和区别?
typeof:判断变量类型
instanceof:判断是否是一个实例
18.请解释JSONP的工作原理,以及它为什么不是真正的AJAX?
首先是利用script标签的src属性来实现跨域;
通过将前端方法作为参数传递到服务器端,然后由服务器端注入参数之后再返回,实现服务端向客户端通信;
由于使用script标签的src属性,因此只支持get方法;
ajax的核心是通过XmlHttpRequest获取非本页内容,而jsonp的核心则是动态添加script标签来调用服务器
提供的脚本
19.bootstrop响应式的实现原理是什么?
栅格系统;
栅格系统其实就是把网页的总宽度均分为12份,可以自由按份来组合,以便以更简单的方式组合出不同的网页界面;
栅格系统将容器均分为12份,再调整内外边距,结合媒体查询,造就了这一强大的栅格系统;
其主要规则是:
1、一个.row应该包含在一个.container当中,才能因为内外边距的正负抵消而有合适的对齐。
2、在.row当中创建一组.column形成水平方向上的容器。
3、具体内容应该放在.column中,而且只有.column可以作为.row的直接子元素。
20.Vue的双向绑定原理是什么?
发布订阅,利用Object.defineProperty()进行数据劫持
21.请简述你对webpack工作原理的理解
22.vue-loader是什么?有什么功能?
Vue Loader 是一个webpack 的loader,它允许你以一种名为单文件组件的格式撰写Vue 组件
23.vuex 是用来做什么的?为什么使用vuex?
vuex 基于flux 思想的状态管理器,主要解决跨组件传值得问题
24.请简述let 和var 的区别?
let 定义块级作用域变量
25.box-sizing 常用的属性有哪些?分别有什么作用?
box-sizing:定义计算元素的总宽度和高度得方法;
content-box: 是默认值,宽度不包括border和padding;
border-box: 宽度包括border和 padding
26.请分别使用ES5,ES6实现数组去重
var arr = [1, 2, 3, 8, 2, 3];
ES5:
var newArr = [];
arr.forEach(item => {
if (newArr.indexOf(item) == -1) {
newArr.push(item);
}
})
console.log(newArr)
ES6:
const set=new Set(arr);
arr=[...set];
console.log(arr);
27.Vuex 是什么,如何使用?
Vuex 是一个针对Vue.js 开发的状态管理模式。说简单一点就是一个工具,可以管理(修改或设置)所有
组件用到的数据,而不需要借助之前的event bus 或props在组件间传值。
store(一个容器对象,存储Vuex 中的state.mutations,actions,actions,getters等)
state(一个保存数据的对象,对象中的数据可以供所有组件使用)
mutations(一个对象,保存的是更改state的函数,也只有它能更改state中的值,触发方式this.$store.commit(‘函数名’,参数)
actions(一个对象,保存的是触发mutations的函数,让mutations去修改state中的值)
getters(一个对象,保存的是一些类似与计算属性的函数,可以通过他们得到任何依赖于state的新的数据)
//如何使用
//第一步
npm install vuex -S
//第二步,在src目录下创建store.js 文件夹
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const state={}
const mutations ={}
const actions = {}
const getter = {}
export default new Vuex.Store({
state,
getters,
actions,
mutations
})
//第三步,在入口文件main.js 中引入
import store from '@/store/store'
//实例中注入
new Vue({
el:'#app',
router,
store,
components:{App},
template:'<App/>'
})
//登录名显示解析
1.在state中定义要操作的数据
const state={
username:''
}
2.赋值
const mutations ={
setUsername:(state,username)=>{
state.username = username
localStorage.setItem('username', username)
}
3.登录成功之后,将username保存到state中(login页面)
this.$store.commit('setUsername',res.data.username)
4.从localStorage中取出数据
const getters = {
username: (state) => localStorage.getItem('username')
}
5.渲染显示
<span class="welcome">
你好,{{$store.getters.username}}
</span>