乐趣区

金s办公软件web前端笔试题

1.
var arr = [];
arr[‘a’] = 1;
console.log(arr.length); // A
arr[‘4’] = 2;
console.log(arr.length); // B
arr.length = 0;
console.log(arr) // C
A、B、C 分别输出什么?运行结果如下:
var arr = [];
arr[‘a’] = 1;
console.log(arr); // [a: 1]
console.log(arr.length); // 0
arr[‘4’] = 2;
console.log(arr) // (5) [empty × 4, 2, a: 1]
console.log(arr.length); // 5
arr.length = 0;
console.log(arr) // [a: 1]
console.log(arr.length); // 0
所以 A 为 0,B 为 5,C 为 [a:1]
2.
for(var i=0; i < 5; i ++) {
// 在此处编写代码
// 每隔一秒按顺序输出 i 值
}
解法:
for (var i = 0; i < 5; i++) {
// 在此处编写代码
// 每隔一秒按顺序输出 i 值
(function(i) {
setTimeout(() => {
console.log(i)
}, 1000 * i)
})(i)
}
这道题如果没有限定给出给定的代码,还可以根据 ES6 块级作用域的知识把 for 循环中的 var 改成 let,或者用 Promise
var arr = []
var output = (i) => new Promise(resolve => {
setTimeout(() => {
console.log(i);
resolve()
}, 1000 * i)
});
for (var i = 0; i < 5; i++) {
arr.push(output(i))
};
3. 有如下代码:
var f = function g() {
return 23;
};
typeof g()
运行结果是:报错
(扩展:如果题目中 typeof f === ‘function’, typeof f() === ‘number’)
4. 有如下代码:
function showCase(value) {
switch (value) {
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)
}
}
showCase(new String(‘A’))
运行结果是:5(扩展:console.log(new String(‘A’)) => String {“A”})
5. 请用 JavaScript 实现 map 的数据结构,要求数据只能通过 map 提供的接口进行访问。
解析:map 的数据结构方法有
size 属性 size 属性返回 Map 结构的成员总数。
set(key, value) set 方法设置键名 key 对应的键值为 value,然后返回整个 Map 结构。如果 key 已经有值,则键值会被更新,否则就新生成该键。set 方法返回的是当前的 Map 对象,因此可以采用链式写法。
get(key) get 方法读取 key 对应的键值,如果找不到 key,返回 undefined。
has(key) has 方法返回一个布尔值,表示某个键是否在当前 Map 对象之中。
delete(key) delete 方法删除某个键,返回 true。如果删除失败,返回 false。
clear() clear 方法清除所有成员,没有返回值。
参考:
function MyMap() {
this.map = new Object();
this.length = 0;

this.size = function() {
return this.length;
}

this.set = function(key, value) {
if (!this.map[key]) {
++this.length;
}
this.map[key] = value;
}
this.get = function(key) {
return this.map[key] ? this.map[key] : undefined;
}
this.has = function(key) {
return this.map[key] ? true : false;
}
this.delete = function(key) {
if (this.map[key]) {
–this.length;
delete this.map[key];
return true;
} else {
return false;
}
}

this.clear = function() {
this.map = new Object();
this.length = 0;
}

}
6. 给定一个排好序的整数数组,判断其中是否存在两个数之和等于指定的值,时间复杂度最好能达到 O(n)。(例如:[1,2,3,4,5,9],指定值为 12,结果为 true)
var twoSum = function(nums, target) {
var arr = {};
for (var i = 0; i < nums.length; i++) {
if (typeof(arr[nums[i]] !== “undefined”)) {
return true
}
arr[target – nums[i]] = i
}
}

退出移动版