某人

此前素未谋面、此后遥遥无期

0%

js编程试题

最近遇到的试题

1.求字符串的字节长度(英文一个字节,汉字两个字节)

1
2
3
4
5
6
7
8
9
10
11
/*charCodeAt() 方法可返回指定位置的字符的 Unicode 编码。这个返回值是 0 - 65535 之间的整数。*/
function getByte(str) {
var len = str.length,
bytes = 0;
for (var i = 0; i < str.length; i++) {
if (str[i].charCodeAt() > 255) {
bytes++;
}
}
return len + bytes;
}

2.specify(“hello world”)// => ‘h e l l o w o r l d’ 实现specify函数

1
2
3
String.prototype.specify = function() {
return this.replace(/\s*/g, "").split("").join(" ");
}

3.数组去重

1
2
3
4
5
6
7
8
9
10
11
12
function unique(arr) {
var _obj = {},
_arr = [],
len = arr.length;
for (var i = 0; i < len; i++) {
if (!_obj[arr[i]]) {
_obj[arr[i]] = 1;
_arr.push(arr[i]);
}
}
return _arr;
}

4.实现一个函数clone,可以对JavaScript中的5种主要的数据类型(包括Number、String、Object、Array、Boolean)进行值复制

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Object.prototype.clone = function() {
var o = typeof(this) === "object" ? {} : [];
for (e in this) {
o[e] = typeof(this[e]) === "object" ? this[e].clone() : this[e];
}
return o;
}

deepClone: function(obj) {
var buf,
_this = this;
if (obj instanceof Array) {
buf = []; //创建一个空数组
var len = obj.length;
while (len--) {
buf[len] = _this.deepClone(obj[len]);
}
return buf;
} else if (obj instanceof Object) {
buf = {}; //创建一个空对象
for (var k in obj) {
buf[k] = _this.deepClone(obj[k]);
}
return buf;
} else {
return obj;
}
}

5.下面这个结构,点击每一列的时候alert其index?(最好使用闭包)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<ul id="test">
<li>这是第一条</li>
<li这是第二条</li>
<li这是第三条</li>
</ul>

var domList = document.getElementById("test").getElementsByTagName("li"),
len = domList.length;
for (var i = 0; i < domList.length; i++) {
domList[i].index = i;
domList[i].onclick = function() {
console.log(this.index);
}
}

var domList = document.getElementById("test").getElementsByTagName("li"),
len = domList.length;
for (var i = 0; i < domList.length; i++) {
domList[i].onclick = (function(n) {
return function() {
console.log(n);
}
})(i);
}

6.将伪数组转化为标准数组

1
2
3
function arrayLike() {
return Array.prototype.slice.call(arguments);
}

7.有这样一个URL:http://item.taobao.com/item.htm?a=1&b=2&c=&d=xxx&e,请写一段JS程序提取URL中的各个GET参数(参数名和参数个数不确定),将其按key-value形式返回到一个json结构中

1
2
3
4
5
6
7
8
9
10
11
12
function serilizeUrl(url) {
var result = {};
url = url.split("?")[1];
if (!url) return null;
var map = url.split("&"),
len = map.length;
for (var i = 0; i < len; i++) {
var _arr = map[i].split("=");
result[_arr[0]] = _arr[1];
}
return result;
}

8.兔子数列是什么(前面相邻两项之和,构成了后一项)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var result = [];

function rabbit(n) { //月数 返回成对兔子数
if (n == 1) {
return 1;
} else if (n == 2) {
return 1;
} else {
if (result[n]) {
return result[n];
} else {
result[n] = arguments.callee(n - 1) + arguments.callee(n - 2);
return result[n];
}
}
}

9.从一个给定的数组arr中,随机返回num个不重复项

1
2
3
4
5
6
7
8
9
10
11
function getArrayItems(arr, num) {
var _arr = [];
for (var i = 0; i < num; i++) {
if (arr.length > 0) {
var index = Math.floor(Math.random() * arr.length);
_arr[i] = arr[index];
arr.splice(index, 1);
}
}
return _arr;
}

结语

!!!:得让你用笔去答题

上面的试题,虽然难度不高,
但是它考验了一个程序员基本的逻辑思维,当你思路都不清晰了,你能保证你的程序能正常运行吗?
上面并没有要求你用多精妙的方法去实现,只是要求实现而已。