滴滴前端面试2020

  1. 第一题 写一个判断所有数据类型的方法getType,入参为任意变量,返回值为该参数类型的字符串形式,如:
    getType([ ]) 返回 ‘array’
    getType(2) 返回 ‘number’
function getType(obj){ var s= Object.prototype.toString.call(obj); return s.slice(s.indexOf(" ")+1,s.length-1).toLowerCase(); }

  1. 第二题 至少用两种方法实现两列布局,左列定宽200px,右列自适应宽
> #box{ overflow: hidden; display: flex; } .left{ /* float: left; */ width: 200px; height: 500px; background-color: #0000FF; } .right{ /* margin-left: 200px; */ background-color: pink; height: 500px; flex: 1; }

  1. 输出结果是什么?请解释其技术原理
var number = 50; var obj = { number:2, getNum:function(){ var number = 6 return this.number } } console.log(obj.getNum())//2 this指的是obj console.log(obj.getNum.call())//50如果传入null也是50this指的是windows console.log(obj.getNum.call({number:7}))//7this的当前传入的对象

  1. 第四题 输出结果是什么?请解释其技术原理
for(var index=0; index<5; index++){ (function(){ setTimeout(function(){ console.log(index) },index*1000) })(index) } //5个5 //for循环没有块级作用域 循环结束index为5 setTimeout为异步操作等循环结束后再执行

//var 换成let可以达到同样的效果 for(var i=0; i<5; i++){ (function(i){ setTimeout(function(){ console.log(i)// 0 1 2 3 4 }) })(i) }

  1. 输出结果是什么?请解释其技术原理
var test_b = 11 console.log(window) if(!(test_a in window)){ console.log(window) var test_a = 11}else{ test_b++ } console.log(test_a) //Undefined console.log(test_b) //12 //全局的声明的变量都会成为window的属性(全局声明的funtion都会成为window的方法) //test_a test_b 都是属于window作用域下test_a in window 为true 取反的话此时为false 走else分支

    推荐阅读