前端面试题分享1

2019-12-10  本文已影响0人  夏海峰

1、对于一个未知宽度的元素,使其左右居中?(至少两种)

<div class="container">
  <div class="box"></div>
</div>
// 方案1
.box { margin: 0 auto; display: inline-block; }

// 方案2
.container { text-align: center;}
.box2 { display: inline-block; }

2、不改变这行代码<img id='img' src=”1.jpg” style=”width:450px !important”>,使该图片其宽度变为300px?

document.getElementById('img').style.width = '300px';

3、说一说opacity:0;visibility:hidden;display:none;三者的区别和使用场景。

4、修改下面的代码,使其打印 0~9 。

// 原始代码(修改前)
for ( let i=0; i<10; i++) {
  setTimeout((i)=>{
    console.log(i)
  }, 1000)
}

// 这段原始代码,等价于下面这段代码
function handle(arg) {  
  console.log(arg)   // arg是handle方法的形参
}
for(let i=0; i<10; i++) {
  setTimeout(handle, 1000)
}
// 修改后(可以打印出0~9)
for(let i=0; i<10; i++) {
  setTimeout(()=>{
    console.log(i)
  }, 1000)
}

5. 请把对象{ 1:222, 2:333, 5:888 }转化成一个固定长度为12的数组[222, 333, null, null, 888, null, null, null, null, null, null, null]

function obj2arr(obj) {
  let arr = new Array(12)
  arr.fill(null)  // 用null填充这个长度为12的数组
  for(let key in obj) {
    arr[key-1] = obj[key]
  }
  return arr
}
// 转化成长度为12的数组
let res = obj2arr({ 1:222, 2:333, 5:888 })

6. Vue中,如何监听 路由参数 发生变化?

// 使用侦听器来监听路由变化
watch: {
  $route() {
    console.log(this.$route.query.id)
    // 相关业务,在这里进一步处理
  }
}

7、请写出下述代码在控制台中的打印结果。

var sf = 0
function getSF() {
  console.log(sf)
  var sf = 1
  console.log(sf)
}
getSF()
console.log(sf)

8、如何判断一个变量是不是JS数组?有哪些判断方法?

var arr = []

arr instanceof Array  // true
Array.isArray(arr)  // true

Object.prototype.toString.call(arr) === '[object Array]'   // true
Object.prototype.toString.apply(arr) === '[object Array]'   // true
Object.prototype.toString.bind(arr)() === '[object Array]'   // true

9、请写出下面代码所返回的结果

typeof 10;  // 'number' 
typeof 1.5;  // 'number' 
typeof NaN;  // 'number' 

typeof null;  // 'object' 
typeof [1,2,3];  // 'object' 
typeof {a:1, b:2};  // 'object' 

typeof undefined;    // 'undefined' 

typeof 'hello';  // 'string' 
typeof '';  // 'string'

typeof Object.prototype.toString;  // 'function' 

typeof false;  // 'boolean'

10、如何把<button id='btn' onclick="alert(1)">按钮</button>按钮禁用掉?

// 如下方案,二选一即可
document.getElementById('btn').disabled = true
document.getElementById('btn').setAttribute('disabled', true)

11、请使用ES6的面向对象语法,封装一个类并实现继承关系。

class Base {
  constructor() {
    this.name = 'base'
  }
}
class Test extends Base {
  constructor() {
    super()
    this.name = 'test'
  }
}

var t = new Test()
console.log(t.name)   // 'test'
console.log(Test.name)   // 'Test'

本篇结束!!!

上一篇下一篇

猜你喜欢

热点阅读