前端题库

1.封装函数 f,使 f 的 this 指向指定的对象

call,apply,bind 都是改变上下文的,但是call apply是立即执行的,而bind是返回一个改变上下文的函数副本

//apply
function bindThis(f, oTarget) {
return function(){
return f.apply(oTarget,arguments)
}
}

//call
function bindThis(f, oTarget) {
return function(x,y){
return f.apply(oTarget,x,y)
}
}

//bind
function bindThis(f, oTarget) {
return f.bind(oTarget)
}

2.题目描述 获取 url 中的参数 1. 指定参数名称,返回该参数的值 或者 空字符串 2. 不指定参数名称,返回全部的参数对象 或者 {} 3. 如果存在多个同名参数,则返回数组

function getUrlParam(sUrl,sKey){
var result = {};
sUrl.replace(/??(\w+)=(\w+)&?/g,function(a,k,v){
if(result[k] !== void 0){
var t = result[k];
result[k] = [].concat(t,v);
}else{
result[k] = v;
}
});
if(sKey === void 0){
return result;
}else{
return result[sKey] || ‘’;
}
}

3.题目描述 查找两个节点的最近的一个共同父节点,可以包括节点自身

function commonParentNode(oNode1, oNode2) {
if(oNode1.contains(oNode2)){
return oNode1;
} else if(oNode2.contains(oNode1)){
return oNode2;
} else {
return arguments.callee(oNode1.parentNode,oNode2)
}
}

4.根据包名,在指定空间中创建对象

function namespace(oNamespace, sPackage) {
var pack = sPackage.split(’.’);
for(var i=0;i<pack.length;i++){
if(!oNamespace[pack[i]]){
oNamespace[pack[i]] ={};
}
oNamespace = oNamespace[pack[i]];
}
}

5.为 Array 对象添加一个去除重复项的方法

Array.prototype.uniq = function () {
var resArr = [];
var flag = true;

for(var i=0;i<this.length;i++){
if(resArr.indexOf(this[i]) == -1){
if(this[i] != this[i]){ //排除 NaN
if(flag){
resArr.push(this[i]);
flag = false;
}
}else{
resArr.push(this[i]);
}
}
}
return resArr;
}

6.用 JavaScript 实现斐波那契数列函数,返回第n个斐波那契数。 f(1) = 1, f(2) = 1 等

function fibonacci(n) {
//一、递归解法
//return n<=2?1:fibonacci(n-1)+fibonacci(n-2);

    //二、循环解法
    var num1=1;
    var num2=1;
    for(var i=2;i<n;i++){
            num2+=num1;
            num1=num2-num1;
    }
    return num2;

}

循环体内的计算过程详解:
第一句:将num2的旧值,加上num1,得到num2的新值
第二句:用num2的新值,减去num1,得到num1的新值
当前循环结束,num1和num2的值都获得了更新~

7.按所给的时间格式输出指定的时间

格式说明
对于 2014.09.05 13:14:20
yyyy: 年份,2014
yy: 年份,14
MM: 月份,补满两位,09
M: 月份, 9
dd: 日期,补满两位,05
d: 日期, 5
HH: 24制小时,补满两位,13
H: 24制小时,13
hh: 12制小时,补满两位,01
h: 12制小时,1
mm: 分钟,补满两位,14
m: 分钟,14
ss: 秒,补满两位,20
s: 秒,20
w: 星期,为 [‘日’, ‘一’, ‘二’, ‘三’, ‘四’, ‘五’, ‘六’] 中的某一个,本 demo 结果为 五

function formatDate(t,str){
var obj = {
yyyyyyyy:t.getFullYear(),
yy:t.getFullYear(),
MM:t.getMonth()+1,
dd:t.getDate(),
HH:t.getHours(),
hh:t.getHours() % 12,
mm:t.getMinutes(),
ss:t.getSeconds(),
ww:[‘日’, ‘一’, ‘二’, ‘三’, ‘四’, ‘五’, ‘六’][t.getDay()]
};
return str.replace(/([a-z]+)/ig,function($1){
//$1是yyyy的时候yyyyyyyy有效,不会进入补零操作,w同理
return (obj[$1+$1]===0?‘0’:obj[$1+$1])||(‘0’+obj[$1]).slice(-2);
});
}

8.如果第二个参数 bUnicode255For1 === true,则所有字符长度为 1 否则如果字符 Unicode 编码 > 255 则长度为 2

function strLength(s, bUnicode255For1) {
if( bUnicode255For1 ){
return s.length;
}else{
var len = s.length;
for( var i=0; i<s.length; i++ ){
if( s.charCodeAt(i) > 255 ){
len++;
}
}
return len;
}
}

9.判断输入是否是正确的邮箱格式

function isAvailableEmail(sEmail) {
var reg=/^([\w+.])+@\w+([.]\w+)+$/;
return reg.test(sEmail);
}

10.css 中经常有类似 background-image 这种通过 - 连接的字符,通过 javascript 设置样式的时候需要将这种样式转换成 backgroundImage 驼峰格式,请完成此转换功能

  1. 以 - 为分隔符,将第二个起的非空单词首字母转为大写
  2. -webkit-border-image 转换后的结果为 webkitBorderImage

function cssStyle2DomStyle(sName) {
return sName.replace(/(?!^)-(\w)(\w+)/g, function(a, b, c){
return b.toUpperCase() + c.toLowerCase();
}).replace(/^-/, ‘’);
}

11.统计字符串中每个字符的出现频率,返回一个 Object,key 为统计字符,value 为出现频率

  1. 不限制 key 的顺序
  2. 输入的字符串参数不会为空
  3. 忽略空白字符

function count(str) {
var obj={};
for(var i=0;i<str.length;i++){
if(str[i]!=’’){
if(obj[str[i]]){
obj[str[i]]+=1;
}else{
obj[str[i]]=1;
}
}
}
return obj;
}

12.题目描述 将 rgb 颜色字符串转换为十六进制的形式,如 rgb(255, 255, 255) 转为 #ffffff 1. rgb 中每个 , 后面的空格数量不固定 2. 十六进制表达式使用六位小写字母 3. 如果输入不符合 rgb 格式,返回原始输入

function rgb2hex(sRGB) {
var strFormat=function (str,num) {
str=(+str).toString(16);
str=str.length<2?str+str:str;
return str;
};
sRGB=sRGB.replace(/^rgb((\d+),\s*(\d+),\s*(\d+))$/g,function (str,s1,s2,s3) {
return “#”+strFormat(s1,16)+strFormat(s2,16)+strFormat(s3,16);
});
return sRGB;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值