面试题小汇总

版权声明:本文为博主原创文章,未经博主允许不得转载。 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>

猜你喜欢

转载自blog.csdn.net/vivian_1122/article/details/88773590