js因为变量提升特性,所以最常见的做法是用一个var申明函数内部用到的所有变量。
function foo() {
var
x = 1, // x初始化为1
y = x + 1, // y初始化为2
z, i; // z和i为undefined
// 其他语句:
for (i=0; i<100; i++) {
...
}
}
获取url里面的参数
function getUrlParam(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)","i");
var r = window.location.search.substr(1).match(reg);
if (r!=null) return (r[2]); return null;
}
获取cookie里面的键值
function getCookie(cookie_name)
{
var allcookies = document.cookie;
var cookie_pos = allcookies.indexOf(cookie_name); //索引的长度
var value = '';
// 如果找到了索引,就代表cookie存在,
// 反之,就说明不存在。
if (cookie_pos != -1)
{
// 把cookie_pos放在值的开始,只要给值加1即可。
cookie_pos += cookie_name.length + 1; //这里容易出问题,所以请大家参考的时候自己好好研究一下
var cookie_end = allcookies.indexOf(";", cookie_pos);
if (cookie_end == -1)
{
cookie_end = allcookies.length;
}
value = unescape(allcookies.substring(cookie_pos, cookie_end)); //这里就可以得到你想要的cookie的值了。。。
}
return value;
}
点击触发复制命令
function copy(val){
var Url2=document.getElementById(val);
Url2.select(); // 选择对象
document.execCommand("Copy"); // 执行浏览器复制命令
//提示复制结果
this.$toast({
message:'已复制好,可贴粘。',
duration:2000
});
},
string indexof(str,index)
字符串的index参数表示从字符串的index索引开始查询str首次出现的位置,不写默认从首字母开始。
sort排序
倒序
1、arr.sort(function(v1,v2){
return v2 - v1;
});
2、var arr = [10, 20, 1, 2];
arr.sort(function (x, y) {
if (x < y) {
return 1;
}
if (x > y) {
return -1;
}
return 0;
});
3、arr.sort();
arr.reverse();
复杂的数据结构排序
var arr1 = [{'name':'tom','age':20},{'name':'dada','age':10},{'name':'tt','age':30}];
arr1.sort(function(v1,v2){
return v2.age - v1.age;
});
结果:
[{'name':'tt','age':30},{'name':'tom','age':20},{'name':'dada','age':10}]
判断对象的某个属性是原型上面的
if((param in obj) && !obj.hasOwnProperty(param)){
//param在原型上面
}
param in obj 返回TRUE,表示param在obj对象上面(可能是自己的属性也可能是object对象的属性)
返回false,则param不在obj对象上
obj.hasOwnProperty(param),返回TRUE,表示param是obj自己定义的属性不是object对象上的属性
返回false,表示param不是obj自己定义的属性
apply和call
apply
虽然在一个独立的函数调用中,根据是否是strict模式,this指向undefined或window,不过,我们还是可以控制this的指向的!
要指定函数的this指向哪个对象,可以用函数本身的apply方法,它接收两个参数,第一个参数就是需要绑定的this变量,第二个参数是Array,表示函数本身的参数。
用apply修复getAge()调用:
function getAge() {
var y = new Date().getFullYear();
return y - this.birth;
}
var xiaoming = {
name: '小明',
birth: 1990,
age: getAge
};
xiaoming.age(); // 25
getAge.apply(xiaoming, []); // 25, this指向xiaoming, 参数为空
另一个与apply()类似的方法是call(),唯一区别是:
apply()把参数打包成Array再传入;
call()把参数按顺序传入。
比如调用Math.max(3, 5, 4),分别用apply()和call()实现如下:
Math.max.apply(null, [3, 5, 4]); // 5
Math.max.call(null, 3, 5, 4); // 5
对普通函数调用,我们通常把this绑定为null。
封装请求,执行的成功或者失败的处理,可以使用call
okCallBack ? okCallBack.call(null,res) : ''
高阶函数
编写高阶函数,就是让函数的参数能够接收别的函数。
function add(x, y, f) {
return f(x) + f(y);
}
add(-5, 6, Math.abs); // 11
数组的map、reduce、filter
map
arr.map(fun);作用于数组的每一个元素,返回美格尔经过fun处理过的元素组成的新数组。
reduce 将处理过的结果累加
reduce.map(fun);
filter,作用于数组的每一个元素,根据处理过的值是true还是false,决定保留还是丢弃该元素。
利用filter,可以巧妙地去除Array的重复元素:
arr.filter(function (element, index, self) {
return self.indexOf(element) === index;
});
querySelector()和querySelectorAll()支持性
低版本的IE<8不支持querySelector和querySelectorAll。IE8仅有限支持。
阻止冒泡
1、return false;
2、event.stopPropagation();
3、trigger事件阻止冒泡,使用triggerHandler()
获取url地址
function getUrlPath(){
// 这部分代码就是处理标题兼容问题的。
// 由于在Chrome window.location.origin 属性是支持的,但是在IE11不支持,会导致无法正常翻页。
var loc = window.location;
var portStr = "";
if(loc.port != 80){ portStr = ":"+loc.port; }
return loc.protocol + "//" +loc.hostname + portStr + loc.pathname;
}