9道前端技能编程题

1.修改this的指向

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

// 方法1:
function bindThis(func, oTarget) {
    return function(){
        return func.apply(oTarget, arguments);
    };
}

// 方法2
function bindThis(f, oTarget) {
	return  f.bind(oTarget);
}

2.获取 url 中的参数

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

输入:getUrlParam('http://www.nowcoder.com?key=1&key=2&key=3&test=4#hehe', 'key')
输出:[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.dom结点查找

查找两个节点的最近的一个共同父节点,可以包括节点自身

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 isAvailableEmail(sEmail) {   
    var reg = /^(w)+(.w+)*@(w)+((.w+)+)$/;    
    return reg.test(sEmail);
}

5.数组去重

Array.prototype.uniq = function() {   
    var arr = [];   
    var flag = true;        
    for (var i = 0; i < this.length; i++) {
        if (arr.indexOf(this[i]) == -1) {  // 如果没有找到indexOf会返回-1
            if (this[i] != this[i]) {   //排除 NaN              
                if (flag) {                   
                    arr.push(this[i]);                   
                    flag = false;              
                }           

            } 
            else {                
                arr.push(this[i]);           
            }       
        }   
    }    
    return arr;
}

6.斐波那契数列

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

function fibonacci(n) {
    // 0 1 1 2 3 5 8
    // 0 1 2 3 4 5 6
    
    if (n == 0 || n == 1) {
        return n;
    }
    
    return fibonacci(n-1) + fibonacci(n-2);
}

7.将字符串转换为驼峰

比如:font-size -> fontSize

function cssStyle2DomStyle(sName) {
    var arr = sName.split(''); 
    //判断第一个是不是 '-',是的话就删除
    if(arr.indexOf('-') == 0)
        arr.splice(0,1);
   //处理剩余的'-'
    for(var i=0; i<arr.length; i++){
        if(arr[i] == '-'){
            arr.splice(i,1);  // 删除-符号
            arr[i] = arr[i].toUpperCase();
        }
    }
    return arr.join('');
}
原文地址:https://www.cnblogs.com/Yfling/p/6628584.html