2021金三银四面试题

235 阅读3分钟

JS和ES6部分

1. map和foreach的区别

map():创建一个新的数组,其中每一个元素由调用数组中的每一个元素执行提供的函数得来。(有返回值,会得到一个新的数组)

forEach():针对每一个元素执行提供的函数(没有返回值,直接返回一个undefined)

2.map和Object的区别

key值的不同

map():可以是数据类型,也就是说可以用一个 Object 来当做一个Map元素的 key。

object():只能是整数,字符串或者是 symbol

3.var arr = [[1, 3, 2, 1],[5, 3, 4, 8, 5, 6, 5],[6, 2, 8, 9, [4, 11, 15, 8, 9, 12, [12, 13, [10], 14]]], 16,'e'],数据扁平化。去重
 var newArr = arr.toString().split(',')
			let e = newArr.map(Number);
			let a = [...new Set(e)]
4.var str = 'daqaghgafkapghjagabgiaowpqwe'遍历字符串,将出现的字符存入到数组中
var obj = {};
			for (var i = 0; i < str.length; i++) {
				if (!obj[str.charAt(i)]) {
					obj[str.charAt(i)] = 1;
				} else {
					obj[str.charAt(i)]++;
				}
			}
			console.log(obj);
			var max = 0;
			var charmax;
			//遍历数组,找出出现最多的字母出现的次数
			for (var key in obj) {
				if (obj[key] > max) {
					max = obj[key];
					charmax = key;
				}
			}
			console.log("出现最多的字符是" + charmax + ",出现了" + max + "次");
5.const arr = [1, 2, 3, 10, 12, 4,4],重小到大排序
使用sort进行排序
let compare1 = function(val1, val2) {
				return val1 - val2
			}
			console.log(arr.sort(compare1));
                        
冒泡排序
for (var i = 0; i < arr.length; i++) {
				console.log(i)
				for (var j = 0; j < arr.length - i; j++) {
					console.log(j)
					if (arr[j] > arr[j + 1]) {
						var temp = arr[j];
						arr[j] = arr[j + 1];
						arr[j + 1] = temp;
					}
				}
			}
			console.log(arr);

6.如何获取url问号后面的参数

使用jq的方式去获取
function GetQueryString(name) {
				var url_string = window.location.href;
				var url = new URL(url_string);
				return url.searchParams.get(name);
			}
                     var id = GetQueryString"id")
                     
vue页面路由方式
this.$route.params.id;或者this.$route.query.id
7.promise与async和await的区别

8.[0,1,0,4,7,0,6] => [0,0,0,1,4,7,6] 如何用代码实现

9.说说你对包闭的理解

10.JS如何实现继承

11.document.ready和onload的区别

JavaScript文档加载完成后会做的两件事情,感觉跟页面的生命周期差不多。

12.定时器有哪两种,有什么不同?

setTimeout() :表示多少秒后再去执行。

setInterval() :以周期性去执行。

追问:setTimeout倒计时为什么会出现误差?

13.如何防止网站被别人使用iframe嵌套,如果项目中a网站iframe嵌套b网站,a和b域名是不一样的,那么a和b网站如何进行通信?

第一个问题:www.cnblogs.com/xiejn/p/119…

第二个问题:segmentfault.com/a/119000001…

14.用过哪些ES6的新特性,说说你的理解

15.如何深度拷贝

反正我是直接JSON.parse(JSON.stringify())的。

16.说说你对DOM和BOM的理解
17.说说你对this指向的理解。call、apply、bind有何区别

this自己去理解吧。

call 方法第一个参数是要绑定给this的值,后面传入的是一个参数列表。当第一个参数为null、undefined的时候,默认指向window。

apply 受两个参数,第一个参数是要绑定给this的值,第二个参数是一个参数数组。当第一个参数为null、undefined的时候,默认指向window。

bind 一个参数是this的指向,从第二个参数开始是接收的参数列表。区别在于bind方法返回值是函数以及bind接收的参数列表的使用。

18.浏览器缓存有哪些有何区别

juejin.cn/post/693756…

19.什么叫事件委托
20.基本类型和引用类型有何不同?分别有哪些?
21.typeof与instanceof区别

typeof只能返回 number,string,undefined,object,boolean,function,symbol类型。

instanceof 运算符用来测试一个对象在其原型链中是否存在一个构造函数的prototype属性。用于判断一个变量是否某个对象的实例。

在判断一个引用类型的变量时会出现一个问题,无论是什么引用类型都是object。这时候就需要instanceof来检测某个对象是不是另一个对象的实例。

相同点:用来判断一个变量是否为空,或者是什么类型的。

22.如何解决跨域问题?
23.如何提高页面加载速度。
24.http和https的区别。