也希望能和其他朋友一起讨论前端的知识,一起进步,多学习点东西。
==========================================================================
考点:数据结构中的排序
题目
解析
这道题考的是排序,那么我们就要知道每种排序的思想和特点。恰好直接插入排序符合题目说的要求。该排序有两层循环,第一层将这个数组完整遍历一遍控制趟数,第二层循环将准备插入的数与前面排好的数从后向前扫描比较大小。而希尔排序会考虑到分组。
考点:js的隐式类型转换
题目:
在试图输出变量的时候会进行隐式转换,自动调用变量的tostring和valueof方法。
做题必备小知识
和=的区别:
-
出现==: 我们可以将=看作的严格模式,当的时候如果数据类型相同那么就会转换成=;如果数据类型不同那么会自动的进行一次类型转换,转换成相同的类型后进行比较。
-
出现===:出现三个等号的时候,首先判断的是类型是否相等,如果不相等就会返回false
valueOf方法和toString方法默认调用toString方法
-
这是为什么呢,我看的有些博客直接说默认调用toString并没有说明原理。其实是这样的,我们看下面的一个例子,虽然colors.valueOf()方法返回的还是一个数组,但是在alert输出的时候隐式调用了toString方法,所以结果是相同的。
-
但是如果是数值运算优先调用valueOf()方法。
var colors = [“red”, “blue”, “green”]; // 创建一个包含3 个字符串的数组
alert(colors.toString()); // red,blue,green
alert(colors.valueOf()); // red,blue,green
alert(colors); // red,blue,green
解析
-
第一次输出:arr===“”;类型都不同,不会调用toString也不会调用valueOf。返回false
-
第二次输出:arr==“”;类型不同但是调用toSrting再进行比较。最后返回true
-
第三次输出:arr===1;结果是false道理同第一次输出
-
第四次输出:arr==1;结果是true,道理同第二次输出,两个方法不是都被重写,调用的是toString方法。
-
第五次输出:arr == 2;结果是true,调用valueOf方法。
-
第六次输出:类型都是同样的object,但是值不相同,所以返回的结果是false
考点:let特点,改变this指向
题目:
解析:
-
fun()是在全局window上调用,但是全局并没有a,使用let和const声明的变量不属于window对象,所以打印undefind
-
fun.aplly(obj)改变this指向,结果是1.
-
值得一提的是第三个。fun.bind(obj1).apply(obj);先通过bind让this绑定到obj1,然后会返回一个新的函数并不执行;且这个新函数确定了this和形参,无法再改变。因而后面的apply相当于失效。结果是2。
-
第四个new fun()考察new的过程
-
1.生成一个新对象
-
2.获得构造函数链接到原型
-
3.绑定this执行构造函数
-
4.返回新对象 这个题目里面构造函数没有a属性,返回undefined。
考点:flex布局计算
题目
解析:
flex-grow: 定义项目放大比例
flex-shrink:定义项目缩小比例
flex-basis:定义了分配多余空间之前,项目占据主轴的空间。
我们看到父元素的宽度是200px,左右分配空间之前的宽度和100px+50px=150px;所以我们的左右盒子应该放大和是50px。根据放大比例是3:2;所以左边盒子50px+30px=80px,右盒子120px。宽度比2:3。
==========================================================================
考点:箭头函数没有this
题目:
解析:
箭头函数不绑定this,箭头函数不绑定自己的this关键字,如果在箭头函数中使用this,那么this将会指向箭头函数定义位置的this。 我们看下面的一个例子
function fn (){
console.log(this);
return ()=> {
console.log(this);
}
}
const obj = {name:‘zhangshan’};
const resFn = fn.call(obj);
resFn();
const resFn = fn.call(obj);让fn的this绑定到obj上;执行resFn()函数就是执行返回的箭头函数,打印的this是fn的this,也就是obj。
然后·回到我们这个题,也是一样的道理,三次都指向共同的父亲的this,也就是箭头函数定义位置的this。三次返回的结果都是foo.
=========================================================================
考点:js中的加号含义
题目
解析
我们先来复习一下js中的六大数据类型,undefined、null、string、number、booleam五种基本类型和引用类型object,除基本类型的都是引用类型例如array、function等。
然后加号最终会存在两种类型转换: 1、当加号两边存在符串的时候按照字符串处理拼接成字符串 2.当没有字符串就当数字处理。所以这个李牧两次都应看成字符串的拼接。
考点:二叉树遍历
题目
解析:
根据前序遍历和中序遍历的特点,c为根节点,所以BAFE是c的左子树,剩余结点是c的右子树。然后我们可以画出如下图所示的二叉树,再后续遍历先遍历左子树,再遍历右子树,最后根节点。结果是bfeahgdc
考点:数组二分查找
题目
解析:
待解决
=============================================================
前端学习是一条漫长的道路,我们要学习的东西不仅仅只有表面的 技术,还要深入底层,弄明白下面的原理,只有这样,我们才能够提高自己的竞争力,在当今这个竞争激烈的世界里立足。
千里之行始于足下,愿你我共勉。
金三银四快到了,送给大家一个小福利,下面是我在工作之余整理的一些面试题,包含HTML、CSS、JavaScript、服务端与网络、Vue、浏览器、react等等。
HTML 篇