一、对象
对象分类:
1、内建对象。例如:Math、String()、Boolean()……
2、宿主对象。例如:DOM、BOM
3、自定义对象。
创建对象:
1、var obj=new Object();
var obj={属性名字:属性值,属性名字:属性名……};
2、
//向对象中添加属性 obj.name="猪猪吧";
//读取对象中没有的属性不会报错,会返回undefined
console.log(obj); document.write(obj.name);
//修改属性值 obj.name="踹二";
//删除属性 delete obj.name;
//in 检查对象里面是否有属性值,返回布尔类型
console.log("name" in obj);
4、对象的属性值也可以是函数,这时,称这个函数为这个对象的方法
二、函数
函数
1、函数也是一个对象,可以封装一些功能(代码),在需要时执行这些功能
2、使用typeof检查时会返回function
创建函数
1、var fun=new function([形参]){
代码块
};//相当于一个赋值
2、function 函数名([形参]){
代码块
}
3、function sum(a,b,c){
var d=a+b+c;
return d;//有返回值更方便函数调用
}
var rs=sum(3,4,6);
函数的实参可以是任意数据类型,也可以是对象,也可以是一个函数
function sayhai(o){
console.log(o.name+";"+o.age+";"+o.add+";")
}
var o={
name:"猪猪吧",
age:18,
add:"北门桥"
};
sayhai(o);
4、使用return 可以退出整个函数,返回值可以是任何数据类型
5、立即执行函数
(function(){
alert("我是一个立即执行的函数");
})();
6、for(var 变量in 对象){
}
对象中有几个属性,循环就会执行几次,每次执行时会将对象中的一个属性的名字赋值给变量
7、this根据调用方式的不同,值不同
-以函数形式调用,this永远是window
*/
/* 使用工厂方法创建对象,无法区分创建的类型
function createPerson(name,age,sex){
//创建对象
var obj=new Object();
//向对象中添加属性
obj.name=name;
obj.age=age;
obj.sex=sex;
obj.sayName=function(){
alert(this.name);
};
//将新对象返回
return obj;
}
var obj1=createPerson("猪猪吧",18,"女");
var obj2=createPerson("踹二",19,"女");
obj1.sayName();
函数的this方法
function Person(name,age,sex){
this.name=name;
this.age=age;
this.sex=sex;
}
//Person.prototype 共有的属性可以放在原型对象中
Person.prototype.sayName=function(){
alert("大家好,我是:"+this.name);
};
var per1=new Person("欸嘿",18,"女");
per1.sayName();
重写toString方法
Person.prototype.toString=function(){
return this.name+"_"+this.age+"_"+this.sex;
}
JS 有自动的垃圾回收机制,我们无法进行操作,我们只需要将不再使用的设置为NULL
函数的方法,调用下面这两个都可以调用函数执行
1、fun.call(obj,1,2)
2、fun.apply(obj,[1,2])
可以将一个对象指定为第一个参数,此时这个对象为现在的函数执行的this
封装实参的对象arguments
-arguments.length 表示实参的长度
-属性:callee 对应当前正在执行的函数对象
Math
-Math是一个工具类而非函数,里面封装一些数学函数
-Math.abs()计算绝对值
-Math.ceil()对一个数向上取整
-Math.floor()对一个数进行向下取整,小数部分会被舍掉
-Math.random()生成0-1之间的随机数 ,不包括0或者1
-生成一个x-y之间的随机数 Math.round(Math.random()*(y-x)+x);
-max()/min()获得多个值之间的最大/最小值
-Math.poow(x,y)返回x的y次幂
-sqrt()开平方
三、数组
数组(Array)
-数组也是一个对象
-以整数数字为索引(0开头)
-读取不曾存在的索引会返回undefined
-最大索引=length-1
-数组中的元素可以是任意数据类型
创建数组
var arr=new Array();
var arr=[];
//语法:数组.length 可以返回数组的长度
1\push("元素") 可以向数组的末尾添加一个或者多个元素,并返回数组新的长度
2\pop() 可以删除数组最后一个元素,并将被删除的元素作为返回值返回
3、unshift() 向数组开头添加一个或者多个元素,并返回新的长度
4、shift()删除数组第一个元素并返回被删除值
5\slice(start,end) 返回一个新的数组,元素为arr的start索引到end-1索引
6、splice(开始位置索引,删除个数,“新的元素”-插入到开始索引位置) 删除数组指定元素,并将被删除元素返回
var arr=["踹二","猪猪吧","哈哈"];
arr.push("二狗");
console.log(arr);
arr.pop();
//用for循环遍历数组
for(var i=0;i<arr.length;i++){
console.log(arr[i]);
}
创建一个函数,将PersonArr中满十八岁的对象提取出来,封装到一个数组中并返回
function Person(name,age){
this.name=name;
this.age=age;
}
Person.rototype.toString=function(){
return this.name+"_"+this.age;
};
//创建对象
var per1=new Person("猪",1);
var per2=new Person("猪猪",9);
var per3=new Person("猪猪吧",18);
var per4=new Person("哈",18);
var per5=new Person("哈哈",16);
//保存到数组里面
var perArr=[per1,per2,per3,per4,per5];
//创建函数将满十八岁的提取出来封装到新的数组中并返回
function getAdult(arr){
//创建新的数组
var newArr=[];
//遍历arr
for(var i=0;i<arr.length;i++){
//判断对象的年龄是否符合要求
if(arr[i].age>=18){
newArr.push(arr[i]);
}
}
//返回新的数组
return newArr;
}
var rs= getAdult(perArr);
console.log(rs);
数组去重(去掉数组重复元素,保留非重复元素)
var arr=[1,1,2,3,4,4,5,6,7,8,3,4,9,10];
for(var i=0;i<arr.length;i++){
//获取当前元素后的所有元素
for(var j=i+1;j<arr.length;j++){
//判断两个元素是否相等
if(arr[i]==arr[j]){
//如果有相等就删除后面的那一个
//当删除了这个元素后,后面的元素会自动补位
//此时j自减,否则补位上来的元素不会再比较,会造成bug
arr.splice(j,1);
j--;
}
}
}
console.log(arr);
1、concat()可以将两个或者多个数组连接,并将新的数组返回
--arr.concat(arr2,arr3,"元素1");
2、join()可以将数组转换为一个字符串,将转换为的字符串作为结果返回
--语法:join(“连接符”);
若不指定连接符,默认“,”
3、reverse()--反转数组
4、sort()可以对数组元素进行排序,默认按照Unicode编码排序,如果对纯数字进行排序的话会有错误
--但是我们可以自己指定排序规则,在sort()中添加一个回调函数,来指定排序规则
-浏览器会根据回调函数的返回值决定元素顺序
-返回值大于0则交换位置,小于等于0则不交换
-升序排列返回a-b
-降序排列返回b-a
方法示例:
arr=["d","s","a","b","e","c"];
arr1=[1,4,2,3,5,7,8,6,9];
arr1.sort(function(a,b){
if(a>b){
return 1;
}else if(a<b){
return -1;
}else{
return 0;
}
});
console.log(arr1);