前端面试题

那啥……要面试了,刷点面试题让我静静。

一、做点JS编程题压压惊

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

var url = 'http://item.taobao.com/item.htm?a=1&b=2&c=&d=xxx&e';
function getKeyValue(url) {
	var result = {};
	url = url.split("?")[1];
	var map = url.split("&");//["a=1", "b=2", "c=", "d=xxx", "e"]
	for (var i = 0; i < map.length; i++) {
		var item = map[i].split("=");
		result[item[0]] = item[1];
	}
	return result;
}
getKeyValue(url);//{a: "1", b: "2", c: "", d: "xxx", e: undefined}

这题就一直在用split()函数了。

2、写一个 function,清除字符串前后的空格。(兼容所有浏览器)

if (!String.prototype.trim) {
	String.prototype.trim = function() {
		return this.replace(/^\s+/,"").replace(/\s+$/,"");
	}
}
var str = '\t  hello world \n'.trim();
alert(str == 'hello world');

在浏览器不存在trim方法的情况下,走自定义的trim。去除字符串开头结尾的空格。

3、如果一对兔子每月生一对兔子;一对新生兔,从第二个月起就开始生兔子;假定每对兔子都是一雌一雄,试问一对兔子,第 n 个月能繁殖成多少对兔子?

var result = [];

function fn(n) { //典型的斐波那契数列
    if (n == 1) {
        return 1;
    } else if (n == 2) {
        return 1;
    } else {
        if (result[n]) {
            return result[n];
        } else {
            //argument.callee()表示 fn()
            result[n] = arguments.callee(n - 1) + arguments.callee(n -
                2);
            return result[n];
        }
    }
}

斐波那契数列。

arguments.callee() 获取当前函数的引用。

4、实现检索当前页面中的表单元素中的所有文本框,并将它们全部清空

for (var i = 0; i < document.forms.length; i++) {
    for (var j = 0; j < document.forms.elements.length; j++) {
        if (document.forms.elements[j].type == "text")
            document.forms.elements[j].value = "";
    }
}

这题挺考验写原生js的能力的呀……

5、希望获取到页面中所有的 checkbox 怎么做?(不使用第三方框架)

<body>
	<input type="text" name="1">
	<input type="checkbox" name="2">
	<input type="text" name="3">
	<input type="checkbox" name="5">
	<input type="text" name="6">
	<script type="text/javascript">
		var domList = [];
		var input = document.getElementsByTagName('input');

		for (var i = 0; i < input.length; i++) {
			if (input[i].type == 'checkbox') {
				domList.push(input[i]);
			}
		}
		console.log(domList);
	</script>
</body>

是document.getElementsByTagName();

elements这里不能少写了s

6、判断一个字符串中出现次数最多的字符,统计这个次数。

var s = "saldkfjalsjfldsieiiiiisdf";
function getNum(s) {
	var result = {};
	for (var i = 0; i < s.length; i++) {
		if (!result[s[i]]) {
			result[s[i]] = 1;
		} else {
			result[s[i]] += 1;
		}
	}
	return result;
}
var result = getNum(s);
var iMax = 0;
for(var i in result) {
	if (result[i] > iMax) {
		iMax = result[i];
	}
}

7、字符串反转,如将 '12345678' 变成 '87654321'。

var str = '12345678';
str = str.split('').reverse().join('');

8、将数字 12345678 转化成 RMB 形式 如: 12,345,678。

var str = '1234567';
var temp = "";
for (var i = 0; i < str.length; i++) {
    temp += str[i];
    if (i % 3 == 2 && i != str.length-1) {
        temp += ',';
    }
}
temp.split("").reverse().join("");

9、生成 5 个不同的随机数。

var result = [];
for (var i = 0; i < 5; i++) {
	var flag = true;
	var x = Math.floor(Math.random()*10);
	for (var j = 0; j < result.length; j++) {
		if (x == result[i]) {
			flag = false;
			// break;
			i--;
		}
	}
	if (flag) {
		result.push(x);
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值