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 中的参数
- 指定参数名称,返回该参数的值 或者 空字符串
- 不指定参数名称,返回全部的参数对象 或者 {}
- 如果存在多个同名参数,则返回数组
输入: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('');
}