2018WPS暑期实习生web前端笔试题
昨天参加的现场笔试,总共六题,现将题目整理如下:
1.判断如下A,B,C各输出什么
var arr = [];
arr['a'] = a;
console.log(arr.length) // A
arr['2'] = 2;
console.log(arr.length) // B
arr.length = 0;
console.log(arr); // C
个人解析:
第一个把’a’转成Number时,变为NaN,所以存不进去,A输出为0,答案是对的,不过解析好像不是这样,大家可以再控制台试一下,因为此时arr是’[a:”a”]’;
第二个,把’2’转为了2,所以相当于’arr[2]=2’这样就把数组变成了3个元素长度的,其中前两个为undefined,B输出3;
第三个,因为length变为0了,所以元素清除,剩下’[a:”a”]’,我答成了’[]’
2.添加代码使得如下代码每隔一秒输出一个数字
for (var i = 0; i < 5; i++) {
// to do
}
代码:
for (var i = 0; i < 5; i++) {
(function(j) {
setTimeout(function() {
console.log(j);
}, 1000 * j);
})(i);
}
3.如下代码输出啥
var f = function g() {
return 32;
}
typeof g();
报错,undefined
4.如下代码输出啥
function jude(val) {
swith(val) {
case "A":
console.log(1);
break;
case "string":
console.log(2);
break;
case "undefined":
console.log(3);
break;
case undefined:
console.log(4);
break;
default:
console.log(5);
break;
}
}
jude(new String("A"));
输出5,我的理解是他new出来的是一个object,然后switch是用的全相等,所以都没有符合的
5.用javascript实现map的数据结构,使得外部只能通过map提供的接口访问数据
这道题就用闭包做的
6.对于一个排好序的数组,如果当中有两个数的和为某个给定的数target,返回true,否则false,事件复杂度O(n)
这是道简单的算法题,分别从头和尾向中间扫描,头尾相加判断和与target的大小关系
和比target小的话,头++
和比target大的话,尾–