- toString()
当我们直接在页面中打印一个对象时,事件上是输出的对象的返回值,如果我们不希望输出[Object Object],可以为对象添加一个toString()方法
function Person((name,age,gender){
this.name=name;
this.age=age;
this.gender=gender;
this.sayName=function(){
alert(this.name);
};
}
Person.prototype.toString=function(){
Return “Person[name=”+this.name+”,age=”+this.age+”,gender=”+this.gender+”]”
}
这个对象类型就是Person
var per=new Person(“孙悟空”,18,”男”);
console.log(per);
- 垃圾回收:
Js中有自动垃圾回收机制,我们不需要也不能进行拉进回收,我们只需要将不再使用的对象设置为null
内建对象
- 数组的介绍:
数组(Array)数组也是一个对象它和普通的对象功能类似,也是用来存储一些值的,数组的存储性能比普通对象要好,在开发中我们经常使用数组来存储一些数据
创建数组对象:
var arr=new Array();
向数组存储元素语法:数组[索引]=值; arr[0]=10;
获取数组长度:console.log(arr.length);
设置数组的长度arr.length= 10; 若修改的length大于原长度,则多出的部分会空出来,若修改的length小于原来长度,则多余元素会被删除
向数组最后一个位置添加元素:
arr[arr.length] = 70;
数组的4个方法:
var arr=[“孙悟空”,”猪八戒”,”沙和尚”];
push()向数组的末尾添加一个或多个元素,并返回数组新的长度
arr.push(“唐曾”,”蜘蛛精”,”白骨精”);
pop();删除数组的最后一个元素,并将删除的元素返回
arr.pop();
unshift();向数组的开头添加一个或更多元素,并返回新的长度,跟push()相似,只是push是往后加unshift是往前加
shift();删除并返回数组的第一个元素,并将删除的元素返回
arr.shift();
数组的遍历:
运用for循环遍历数组
var arr=[“孙悟空”,”猪八戒”,”沙和尚”,”唐曾”];
for(var i=0;i<arr.length;i++){
console.log(arr[i]);
}
数组练习:
function Person((name,age){
this.name=name;
this.age=age;
this.sayName=function(){
alert(this.name);
};
}
//向原型对象toString方法
Person.prototype.toString=function(){
Return “Person[name=”+this.name+”,age=”+this.age+”,gender=”+this.gender+”]”
}
var per=new Person(“孙悟空”,18);
var per1=new Person(“猪八戒”,28);
var per2=new Person(“红孩儿”,8);
var per3=new Person(“蜘蛛精”,16);
var per4=new Person(“二郎神”,38);
var perArr=[per,per1,per2,per3,per4]
创建一个数组将瞒18岁的对象提取出来
function getAdult(arr){
var newArr=[];//创建新的数组
for(var i=0;i<arr.length;i++){
var p=arr[i];
if(p.age>=18){
newArr.push(p);
}
}
}
//调用方法
var result=getAdult(perArr);
console.log(result);
forEach()遍历数组:
var arr=[“孙悟空”,”猪八戒”,”沙和尚”,”唐曾”]
arr.forEach(); IE8以上的浏览器
需要一个函数作为参数,这种函数由我们创建但不是由我们调用的我们称为回调函数
数组中有几个元素函数就会执行几次,每次执行浏览器会将遍历道德元素以实参的形式传递进来,我们可以定义形参,来读取这些内容
浏览器会在回调函数中传递三个参数
第一个参数,就是当前正在遍历的元素
第二个参数,当前正在遍历的元素的索引
第三个元素,就是当前遍历的数组
arr.forEach(function (value,index,obj){
console.log(value);
});
slice和splice方法
slice(); 从某个已有的数组返回选定的元素,该方法不会改变原数组,而是将截取到的元素封装到一个新的数组中返回
有2个参数:第一个,截取开始的位置,包含起始位置
第二个,截取结束的位置,不包含结束索引
第二个参数可以省略不写,此时会截取从开始索引的所有元素
索引可以传递一个负值,则是从后往前计算
var arr=[“孙悟空”,”猪八戒”,”沙和尚”,”唐曾”]
var result=arr.slice(0,2);
colsole.log(result);
splise();可以用于删除数组中指定的元素,并向数组添加新元素,使用splice()会影响到原数组,会将指定元素从原数组中删除,并将删除的元素作为返回值返回
arr.splice(0,2);
参数: 第一个,表示开始位置索引
第二个,表示删除的数量
第三个参数以及以后,可以传递新的元素,这些元素将会自动插入到开始位置索引的前面
var result=arr.splice(0,2);
console.log(arr);
concat()方法
连接两个或更多的数组,并返回结果
var arr=[“白骨精”,”玉兔精”,”蜘蛛精”];
var arr2=[“孙悟空”,”猪八戒”,”沙和尚”];
var arr3=[“二郎神”,”太上老君”,”玉皇大帝”];
var result=arr.concat(arr2,arr3);
console.log(result);
join()方法将数组所有元素放入一个字符串,元素通过指定的分隔符进行分隔,该方法可以将一个数组转换成一个字符串
参数: “-”使用-作为连接符,默认使用 “,”作为连接符
var arr2=[“孙悟空”,”猪八戒”,”沙和尚”];
result=arr.join();
console.log(result);// “孙悟空”,”猪八戒”,”沙和尚”
console.log(type result);//String
reverse()方法
颠倒数组中元素的位置,该方法用于反转数组,该方法会直接修改原数组
Sort()方法
对数组的元素进行排序,也会影响原数组,按照Unicode及编码进行排序,对于纯数字的数组,使用sort()排序时,可能会的到错误的结果,我们可以自己制定规则:我们可以在sort()中添加一个回调函数,浏览器会分别使用数组中的元素作为参数调用回调函数,使用那个元素调用调用不确定,但是肯定的是在数组中a一定在b的前面
如果返回一个大于0的值,则元素会交换位置
如果返回一个小于0的数,则元素位置不变
如果返回0,则元素位置不变
arr =[5,4,3];
arr.sort(function (a,b){
//前面大
if(a>b){
return 1;
}else if{
return -1;
}else{
return 0;
}
//升序排列,或者直接写
return a-b;
//降序排列
return b-a;
});
Console.log(arr);
函数的方法:
call()和apply() 需要函数对象来调用
函数也是一个对象:
function fun(){
Alert(“我是fun函数”);
}
fun.call();
fun.apply();
当函数调用call()和apply()都会调用函数执行,在调用的call和apply可以将一个对象指定为第一个参数,可以修改函数执行时的上下文对象
此时这个对象将会成为函数执行时的this
function fun(){
Alert(this);
}
this:的情况:
以函数形式调用时,this永远是window fun();
以方法形式调用时,this是调用方法的对象
以构造函数的形式的形式调用时,this是新创建的那个对象
使用call和apply调用时,this是指定的那个对象
fun();// [Object Window]
var obj={ }
fun.call(obj);//[object Object]
fun.apply(obj);
call方法可以将实参在对象之后依次传递:
function fun(a,b){
console.log(“a=”+a);
console.log(“b=”+b);
}
fun.call(obj,2,3)
apply()方法需要将实参封装到一个数组中统一传递
fun.apply(obj,[2,3])
arguments参数
调用函数时,,浏览器每次都会传递两个隐含的参数
- 函数的上下文对象this 2.封装实参的对象arguments arguments是一个类数组对象
它可以通过索引来操作数据,也可以获取长度,在调用函数时,我们所传的实参都会在arguments中保存
它里面有一个属性叫做callee,这个属性对应一个对象,就是当前正在执行的函数对象arguments.callee=fun
function fun(a,b){
//判断是否属于数组
//concole.log(arguments instanceof Araay);
//console.log(Arrar.isArray(arguments));
console.log(argument.length);
console.log(argument)
}
fun(“hellow”,true);