javascript常用方法
目录
- sort
- reverse
- 函数的属性和方法
- 属性
- length
- prototype
- 方法
- apply
- call
- bind
- 属性
- 万能的splice
- 日期对象date
- parseint
- object的keys方法
sort
含义:排序
用法:array.sort();
但是: sort() 方法也会根据测试字符串的结果改变原来的顺序。因为数值 5 虽然小于 10,但在进行字符串比较时, "10" 则位于 "5" 的前面
那么:可以定义一个排序的规则方法,然后传给sort
eg:
var descFun = function(a, b){ // 若a>b,则b-a<0,负不动,排序:a, b
return b-a;
}
array.sort(descFun); //实现降序排列
【当sort接受到负值时,则不动;正数则交换。0也不动。】
reverse
含义:倒序
用法:array.reverse();
函数的属性和方法
属性
每个函数都包含两个属性:length & prototype
length
表示函数希望接收的命名参数的个数。
eg:
function sum(num1, num2){
return num1 + num2;
}
alert(sum.length); //2
prototype
[引]对于ECMAScript 中的引用类型而言, prototype 是保存它们所有实例方法的真正所在。换句话说,诸如toString() 和 valueOf() 等方法实际上都保存在 prototype 名下,只不过是通过各自对象的实例访问罢了。
方法
每个函数都包含两个非继承而来的方法: apply() & call()
用途: 都是 可以在特定作用域中调用函数。
apply()
functionName.apply(作用域,参数数组);
第二个参数可以是 Array 的实例,也可以是arguments 对象。
eg:
function sum(num1, num2){
return num1 + num2;
}
function callSum1(num1, num2){
return sum.apply(this, arguments); // 传入 arguments 对象
}
function callSum2(num1, num2){
return sum.apply(this, [num1, num2]); // 传入数组
}
alert(callSum1(10,10)); //20
alert(callSum2(10,10)); //20
call()
functionName.call(作用域,参数1,参数2,...);
eg:
function sum(num1, num2){
return num1 + num2;
}
function callSum(num1, num2){
return sum.call(this, num1, num2);
}
alert(callSum(10,10)); //20
[亮点]传递参数并非 apply() 和 call() 真正的用武之地;它们真正强大的地方是能够扩充函数赖以运行的作用域。
eg:
window.color = "red";
var o = { color: "blue" };
function sayColor(){
alert(this.color);
}
sayColor(); //red
sayColor.call(this); //red
sayColor.call(window); //red
sayColor.call(o); //blue
使用 call() (或 apply() )来扩充作用域的最大好处,就是对象不需要与方法有任何耦合关系。
[扩充]bind()
ECMAScript 5 还定义了一个方法: bind() 。这个方法会创建一个函数的实例,其 this 值会被绑
定到传给 bind() 函数的值。例如:
window.color = "red";
var o = { color: "blue" };
function sayColor(){
alert(this.color);
}
var objectSayColor = sayColor.bind(o);
objectSayColor(); //blue
支持 bind() 方法的浏览器有 IE9+、Firefox 4+、Safari 5.1+、Opera 12+和 Chrome。
每个函数继承的 toLocaleString() 、 toString() 、valueOf()方法始终都返回函数的代码。
万能的splice
(for Array)
splice可以完成数组元素的删除、插入、替换的功能,非常好用!
- 删除
array.splice(起始位置,删除的个数);
- 插入
array.splice(起始位置,0,插入的元素);
- 替换
array.splice(起始位置,1,替换的元素);
日期对象date
当前时间:var now = new Date();
结果格式:
Wed Apr 06 2016 15:50:50 GMT+0800 (中国标准时间)
指定某个时间: var date = new Date('2016-04-06');
结果:
Wed Apr 06 2016 08:00:00 GMT+0800 (中国标准时间)
常用的Date 对象方法:
- getHours 返回小时 (0 ~ 23) - 时
- getMinutes 返回分钟(0 ~ 59) - 分
- getSeconds 返回秒数(0 ~ 59) - 秒
- getDate 返回一个月中的某一天(1 ~ 31) - 日
- getDay 返回一周中某一天(0 ~ 6) - 星期
- getMonth 返回某月(0 ~ 11) - 月
- getFullYear 返回4位数年份 - 年
用法eg:
now.getHours();
- setDate()方法 用于设置一个月的某一天。
dateObject.setDate(day) //day 必需,表示一个月中的一天的一个数值(1 ~ 31)。
eg:
var d = new Date(2016,1,1); // 第二个参数范围是0~11,d是2016年2月1日
d.setDate(29); // 2016年的2月有29天,则,setDate之后d变成2016年2月29日
d.setDate(30); // 30>29,所以当前日期变成2016年3月1日
parseint
(是parseInt,因为标题处不允许写大写,所以写了小写。)
解析一个字符串,并返回一个整数。
用法:parseInt('字符串',基数); //基数是10进制?2进制?8进制?16进制。。。基数非必填,则以 10 为基础来解析。
parseInt("10"); //返回 10
parseInt("19",10); //返回 19 (10+9)
parseInt("11",2); //返回 3 (2+1)
parseInt("17",8); //返回 15 (8+7)
parseInt("1f",16); //返回 31 (16+15)
parseInt("010"); //未定:返回 10 或 8
object的keys方法
要取得对象上所有可枚举的实例属性,可以使用 ECMAScript 5 的 Object.keys() 方法。
这个方法接收一个对象作为参数,返回一个包含所有可枚举属性的字符串数组。
function Person(){
}
Person.prototype.name = "Nicholas";
Person.prototype.age = 29;
Person.prototype.job = "Software Engineer";
Person.prototype.sayName = function(){
alert(this.name);
};
var keys = Object.keys(Person.prototype);
alert(keys); //"name,age,job,sayName"
var p1 = new Person();
p1.name = "Rob";
p1.age = 31;
var p1keys = Object.keys(p1);
alert(p1keys); //"name,age"
这里,变量 keys 中将保存一个数组,数组中是字符串 "name" 、 "age" 、 "job" 和 "sayName" 。这个顺序也是它们在 for-in 循环中出现的顺序。如果是通过 Person 的实例调用,则 Object.keys()
返回的数组只包含 "name" 和 "age" 这两个实例属性。
如果你想要得到所有实例属性,无论它是否可枚举,都可以使用 Object.getOwnPropertyNames()
方法。
var keys = Object.getOwnPropertyNames(Person.prototype);
alert(keys); //"constructor,name,age,job,sayName"
注意结果中包含了不可枚举的 constructor 属性。 Object.keys() 和 Object.getOwnProperty-Names() 方法都可以用来替代 for-in 循环。支持这两个方法的浏览器有 IE9+、Firefox 4+、Safari 5+、Opera12+和 Chrome。
因为keys的返回值是数组,所以可以利用keys来把Object类型转Array类型,在兼容的情况下,可以用哟!