去哪儿 2021届春招前端笔试真题
选择判断
1、已知对象a,那么以下哪些属于对象浅拷贝?
- A: let b = a
- B: let b = Object.assign({}, a)
- C: let b = {...a}
- D: let b = JSON.parse(JSON.stringify(a))
正确答案:B、C
2、判断一个对象a是数组,下列不正确的做法是?
- A: a.length > 0
- B: typeof a === 'array'
- C: Array.isArray(a)
- D: a instanceof Array
正确答案:A、B、D
3、123 a.js的加载和执行会阻塞后面div的渲染吗?
- A: 不会
- B: 会
正确答案:B
4、function A() {this.name='zz';return null}; let a = new A() 那么alert(a.name)会弹出什么?
- A: null
- B: zz
- C: 执行会出异常
正确答案:B
5、下列哪些css属性是可继承的?
- A: color
- B: padding
- C: height
- D: border
正确答案:A
6、下面关于cookie和storage的理解,正确的是?
- A: 都是存储在客户端
- B: 都可以跟随http请求传输
- C: 都有域名的限制
- D: 都可以通过服务器的header进行下发设置
正确答案:A、C
编程题
1、有个页面,url是:https://flight.qunar.com/pageconfig/list?type=shark_test&name=jim,要求写一个函数,可以满足两个需求:1、传入 type,可以获取到 shark_test 2、不传参数,则获取 {type: "shark_test", name: "jim"}
使用方法:
let typeValue = getParam('type');
let allValues = getParam();参考答案:
function getParam (...args) {
let matches = location.search.match(/([^?=&]+=[^&]+)/g);
if (matches) {
const querys = {};
matches.forEach(function (tmp) {
let kv = tmp.split('=');
kv[1] && kv[1] !== 'undefined' && kv[1] !== 'null' && (querys[kv[0]] = decodeURIComponent(kv[1]));
});
return args.length
? args.length === 1 ? querys[args[0]] : pick(querys, args)
: querys;
}
}2、航班列表页面,有筛选组件,和列表组件,点击筛选项之后需要刷新列表组件,要求写一段代码,实现在筛选项点击之后发布一个消息出来,列表组件来订阅这个消息,等到消息收到的时候,来触发自己的刷新。
题目要点:主要是实现消息发布和订阅
使用方法:
const message = new Message();
message.on('receive-data', function(data) {
console.log(data);
});
setTimeout(function() {
message.dispatch('receive-data', {name: 'xxxx'});
}, 200);参考答案:
class Message {
constructor() {
this.messages = {};
this.events = {};
}
dispatch(key, value) {
this.messages[key] = value;
let handlerList = this.events[key];
if(!handlerList || handlerList.length === 0) {
return;
}
for(let i=0; i<handlerList.length; i++) {
let handler = handlerList[i];
let result = {};
handler(value, key, result);
}
}
on(key, handler, consume) {
if(consume) {
let value = this.messages[key];
if(value) {
handler(value, key);
}
}
let handlerList = this.events[key];
if(!handlerList) {
handlerList = [handler];
this.events[key] = handlerList;
} else {
handlerList.push(handler);
}
}
off(key, handler) {
let handlerList = this.events[key];
if(!handlerList || handlerList.length === 0) {
return;
}
let index = handlerList.indexOf(handler);
if(index > -1) {
handlerList.splice(index, 1);
}
}
}
海康威视公司福利 1235人发布
查看7道真题和解析