2018-05-29

 一、什么是对象: 生活中的一切事物都可以看成是对象 在js中,对象就是属性的集合。同时它也是一种数据类型 (2)创建一个对象 1.var obj={} 2.var obj=new Object(); 案例:创建一个人的对象,并且为对象中添加属性 var person={ name:'张三', age:18, sex:'男' } 获取对象中的属性有两种方法 1.对象名.属性名 person.name 2.对象名[属性名] person[age] (3)对象中属性的类型 对象中的属性可以是字符串,数字,也可以为函数。当对象中的属性值为函数的时候,我们称这个属性为对象的方法 案例:var person={ name:'张三', age:18, sex:'男', sayName:function(){ console.log('我的名字叫张三') } } person.sayName(); //对象中的方法想要访问对象中的属性要用this关键字 案例: var person={ name:'张三', age:18, sex:'男', sayName:function(){ // console.log('我的名字叫'+name);name不会被输出 //对象中的方法想要访问对象中的属性必须要用this关键字 console.log('我的名字叫'+this.name); } } person.sayName(); //3.对象中的属性被替换 案例:var person={ name:'张三', age:18, sex:'男', sayName:function(){ console.log('我的名字叫'+this.name); } } cat.sayName(); cat.name='李四'; console.log(cat.name); cat.sayName(); (4)给对象中的方法传参 案例: var person={ name:'张三', age:18, sex:'男', sayName:function(){ console.log('我的名字叫'+this.name); }, count:function(a,b){ console.log(a+b); } } cat.sayName(); cat.count(3,5); (5)如何遍历js中的对象 案例: var person={ name:'张三', age:18, sex:'男' } for(var key in person){ //输出对象中的属性值 console.log(person[key]); //输出对象中的关键字 console.log(key); } 二、原始类型与引用类型: (1)js6种数据类型 数值型 字符串型 布尔型 Null Undefined 对象 我们可以按照这六种数据类型按照存储方式分为两类 1.原始类型:存储的是值本身 *数值型 *字符串型 *布尔型 * Null * Undefined 2.引用类型:储存的是一个引用 *对象 *原始类型与引用类型的差异 (1) //a相当于把自己的值复制了一份给b,所以当a的值改变的时候不会影响b的值的改变 案例: /*var a='hello world'; var b=a; var a='hello javascript'; console.log(a);//hello javascript console.log(b);//hello world*/ 案例中值得类型为字符串,接下来把字符串换成对象 var obj1={ name:'jack', age:18 } var obj2=obj1; obj1.name='rose'; console.log(obj1.name);//rose console.log(obj2.name);//rose //我们发现当obj1的值改变,obj2中的值也跟着变化。因为引用类型存储的是一个地址,而不是值本身。两个对象引用的是同一个地址。所有当一个改变时,另一个也会跟着变 (2)原始类型与引用类型比较的区别 接下来我们来看一下原始类型与引用类型比较的时候有什么来区别 var str1 = 'hello world'; var str2 = 'hello world'; console.log(str1 == str2); //true var obj1 = {name:'xiaoming'}; var obj2 = {name:'xiaoming'}; console.log(obj1 == obj2); //false (3)原始类型与引用类型传参的区别 原始类型: 案例:var str='hello world'; function fun(s){ s='hello javascript'; } fun(str); console.log(str); 在上面的代码中我们将变量str传给函数fun,在fun内部将参数将另一个字符串赋值给参数,然后在函数外面输出str,发现str的值并没有变 引用类型: 案例: var obj={name:'jack',age:18}; function fun(o){ o.name='rose'; } fun(obj); console.log(obj); 将参数换成引用类型后,我们发现再次输出obj的时候,它的值已经变成了函数中赋的值,这是因为原始类型传参的时候,实参是形参的副本,改变形参的时候不会影响实参,而应用类型传参的时候,形参和实参的对象都指向一个引用,这样当我们修改形参的值的时候,其实是操作了内存中的对象,所以函数外部变量的值也就跟着变化了。 三、递归函数 //编写一个函数n,调用这个函数时,倒叙输出1-n之间的所有正整数。比如输入5,会输出5,4,3,2,1 /*function print(n){ for(var i=n;i>0;i--){ console.log(i); } } print(5);*/ //以上效果还可以用递归实现: //递归:在函数内再次调用该函数 /*function show(n){ console.log(n); if(n>1){ show(--n); } } show(5);*/ //计算阶乘: //5的阶乘:5*4*3*2*1 //用for循环的方式 案例: function count(n){ var result=1; for(var i=n;i>0;i--){ result=result*i; } return result; } console.log(count(5)); //用阶乘的方式: 案例: function counts(n){ if(n==1){ return n; }else{ return n*count(n-1); } } console.log(count(5)); 四、克隆 案例: var obj={name:'jack',age:18} function clone( ){ var obj1={ } for(var key in obj){ obj1[key]=obj[key]; } return obj1; } var obj1=clone( ); console.log(obj1); obj.name='rose'; console.log(obj1);

你可能感兴趣的:(2018-05-29)