毕业半年,坐标上海 有着一颗去BBA的心,可是技术却很渣。12月份开始投简历,出去试了大概有四家公司,主要的都是中小型的公司,前端面试大概就是js基础,es6偶尔还带上了算法的基础。遇到一个vue相关就是多语言的配置,仅此而已。下面是19年下半年出去面试所遇到的题目,希望对你有所帮助。大神轻喷
js部分
说一说: js的基本数据类型
js的基础数据类型为:undefined Null Boolean String Number
附:js的复杂数据类型 object
基本类型:undefined null boolean number
引用类型:Object Array Function
说一说:var let const 的区别
var定义的变量,没有块的概念,可以跨块访问,不能跨函数访问。
let定义的变量,只能在块作用域里访问,不能跨块访问,也不能跨函数访问
const用来定义变量,使用时必须初始化(即必须赋),只能在块作用域内访问,不能修改
(function A() {var d = 5;let e = 6;const f = 7;console.log(d); // 5console.log(e); // 6 console.log(f); // 7
})();
// console.log(d); // 报错
// console.log(e); // 报错
// console.log(f); // 报错
附:在es6中新增了块级作用域的概念,由{}包括,if语句和for语句的{}也属于块级作用域
说一说:typeof和instanceOf的区别
typeof和instanceof 判断一个变量是否为空
typeof返回的 ‘number’,’string’ ‘boolean’ ‘object’ ‘function’ ‘undefined’。
typeof无法判断 Array 和 object //typeof(array) => object
instanceof来检测某个对象是不是另一个对象的实例 他的判断就是根据原型链进行搜寻
说一说:‘==’ 和 ‘===’的区别
var a=12;
var b='12';
alert(a==b);//返回结果为 true
alert(a===b);返回结果为false
'==' 仅仅比较两个变量的值,不管数据类型
'===' 在比较值和数据类型,必须同时满足才能为true
说一说map和set的区别
map对一个数组操作,一般是生成一个新的数组,可以在map中限制新数组生成的条件,返回一个新的数组
foreach方法:一般是对原有数组进行操作,没有返回值
附:filter():是对一个数组进行过滤,filter()方法会创建一个新的数组,包含通过过滤的元素
对闭包的理解
闭包是指有权访问另一个函数作用域中变量的函数(通过闭包可以在函数外部能访问到函数内部的变量)
作用域的定义:是一套规则,用于确定在何处以及如何查找变量(标识符)
两种工作模型: 词法作用域:作用域是在编写代码的时候确定
动态作用域:作用域是在代码运行的时候确定 注:javascript使用的是词法作用域
css部分
说一说:在不知宽高的情况下,垂直居中的办法
第一种:display:table-cell
组合使用display:table-cell 和 vertical-align,text-align,使氟元素的所有行业元素水平垂直居中,内部div设置display:inline-block
.cell {display: table-cell;vertical-align: middle;text-align: center;width: 240px;height: 180px;border:1px solid #666;
}<div class="cell"><p>我爱你</p><p>亲爱的中国</p><div style="width:100px;height:50px;border:1px solid #ccc;display:inline-block">div(inline-block)</div></div>
第二种 transform:translate(-50%,-50%)
结合position:absolute top:50% left:50% transform:translate(-50%,-50%);
.content { padding:10px;background:green;color:#fff;position:absolute;top:50%;left:50%;border-radius: 5px;//版本兼容-webkit-transform: translate(-50%,-50%); -moz-transform: translate(-50%,-50%);transform:translate(-50%,-50%);
}
第三种: 利用弹性布局实现垂直左右居中
display:flex justify-content:center 定义在主轴(水平方向)居中对齐 align-items:center 定义在交叉轴上居中对齐
附:已知宽高水平居中的办法
方法一: 绝对定位+margin
合并两个数组 a和b
方法一:concat() 连接两个或更多的数组,并返回结果
var c = a.concat(b)
问题:数据量大的时候不合适,消耗内存。
方法二:遍历一个数组加到另一个数组
for(var i in b){
a.push(b[i]
)
方法三 利用apply
a.push.apply(a,[4,5,6])
实现字符串反转 简单的代码实现
实现将 'this is my book' => 'book my is this'
function reverseString(strings){
return strings.split(' ').reverse().join(' ')
}