前端基础面试题

2 阅读1分钟

ES6

1.1 let 和const

1.2 对象和数组解构赋值

	let obj={
		name:'jcak',
		age:18,
		sayHi():{
			console.log("Hi")
		}
	}
	let {name,age,sayHi}=obj
	sayHi(); 	//Hi

1.3箭头函数

1、箭头函数的this指向的是所属的作用域,而普通函数的this是指向所调用的对象。 2、箭头函数不能作为构造函数去使用 3、箭头函数不能使用arguments

1.4新增了Symbol类型,命名是唯一的,不会产生冲突

1.5 Promise/async/await

三种状态,pending(等待)、fulfilled(成功)、rejected(失败)

var pro = new Promise((resolve, reject) => {
      setTimeout(() => {
        const num = prompt() //方法用于显示可提示用户进行输入的对话框
        if (num > 10) {
          resolve()
        } else {
          reject()
        }
      }, 3000)
    })
 pro.then(() => {
      // 写成果兑现的时候具体要做的事情
      console.log('承诺兑现,你真棒')
    }).catch(() => {
      // 写承诺失败要做的具体事情
      console.log('承诺失败,你真菜')
    }).finally(() => {
      console.log('不管承诺成功与否我都会出来')
    })

1.6 for...of 和for...in

1.7MAP和SET

map也就是键值对,set是集合,值唯一。

HTML

2.1 跨域

2.1.1postMessage解决http和https之间的通信

跨域源于同源策略,也就是域名,端口,还有协议必须相同,如果不相同则出现跨域问题。 利用window.postMessage解决http和https之间的通信

2.1.2利用JSONP解决跨域

02利用JSONP解决跨域

//vue.js
this.$http.jsonp('http://www.domain2.com:8080/login', {
    params: {},
    jsonp: 'handleCallback'
}).then((res) => {
    console.log(res); 
})
2.1.3服务器端设置Access-Control-Allow-Origin为True来进行解决

03 服务端设置CORS

2.1.4 webpack本地代理
    devServer: {
        port: 8080,
        proxy: {
            "/api": {
              target: "http://192.168.25.20:8088" // 后端接口
            }
        }
    }

2.2 cookie、localStorage、sessionStorage区别

2.3布局

常见类型

2.3.1 单列布局
2.3.2 双列布局
2.3.3 三列布局
2.3.4 div垂直居中

01 绝对定位

div{
    background:red;
    position: absolute;
    left:50%;
    top:50%;
    transform: translate(-50%, -50%);
}

02

2.4 HTTP协议

2.4.0 HTTP和HTTPS的区别

HTTP 是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的 SSL 加密传输协议。 HTTP和HTTPS 使用完全不同的连接方式,所用的端口不同,前者是80 端口,后者是 443端口 主要的状态码 200、404、500

2.4.1 GET请求

主要是从服务器获取数据

2.4.2 POST请求

主要是发送数据

2.5 computed和watch的区别

2.5.1 computed 计算结果并返回,只有当被计算的值发生改变时才会触发
new Vue({
    el: '#id',
    template: `<div>
        <span>Name: {{name}}<span>
    </div>`,
    data: {
        firstName: 'Leo',
        lastName: 'Alan'
    },
    computed: {
        name () {
            return `${this.firstName} + ${this.lastName}`
        }
    }
})

2.5.2 监听某一个值,当被监听的值发生变化时,执行对应的操作

(与computed的区别是,watch更加适用于监听某一个值的变化并做对应的操作,比如请求后台接口等,而computed适用于计算已有的值并返回结果)

new Vue({
    el: '#id',
    template: `<div>
        // ...
    </div>`,
    data: {
        firstName: 'Leo',
        lastName: 'Alan',
        obj1: {
            a: 0
        }
    },
    watch: {
        // 监听firstName,当firstName发生变化时就会执行该函数
        firstName () {
            // 执行需要的操作...
            // 注:初始化不会执行,只有当被监听的值(firstName)发生变化时才会执行
        },

        // 监听lastName
        lastName: {
            handler (newName, oldName) {
                // 执行需要的操作...
            },
            immediate: true // true: 初始化时就会先执行一遍该监听对应的操作    
        },

        obj1: {
            handler () {
                // 执行需要的操作...
            },
            deep: true // 该属性默认值为false. 
            // 当被监听的值是对象,只有deep为true时,对应属性的值(obj1.a)发生变化时才能触发监听事件,但是这样非常消耗性能
        },

        // 监听对象具体的属性, deep就不需要设置为true了
        'obj1.a': {
            handler () {
                // 执行需要的操作...
            }
        }

    }
})

2.6 vue组件通信

2.6.1 父子组件

1、props+emit 2、refs+refs+parent 3、provider/inject

2.6.2 兄弟组件

1、eventBus 2、parent.parent.refs