对象就是集合 任意值的集合
对象的简单了解

var cat = {// 基本数据类型'name':'Tom','age':4,// 数组'family':['father','mom'],// 放置函数'speak':function(){console.log('喵喵~');},// 继续存储对象'friend':{'name':'Jerry','age':4}};
如何使用对象
// 可以通过new实例化构造函数var cat = new Object();var cat = {};//这两个都表示空对象//es5 Object.create() 存在兼容性
var cat = {// 基本数据类型'name':'Tom','age':4,// 数组类型'family':['father','mom'],// 放置函数类型'speak':function(){console.log('喵喵~');},// 继续存储对象'friend':{'name':'Jerry','age':4}};// console.log(cat);cat.name='Tim';cat['name']='Tim';//修改 写操作cat.type='加菲猫';console.log(cat.name);//查询 读操作console.log(cat['name']);//查询 读操作console.log(cat.type);delete cat.type;console.log(cat.type);//如何检测一个对象是否拥有该属性console.log('type' in cat);//循环遍历对象 循环输出每一个属性名for(var p in cat){console.log(p);console.log(cat[p]);//console.log(cat.p);不能使用点 因为点表示 .属性}
面向对象的变成思想 万物皆可对象
new实例化构造函数
封装函数
匿名函数
构建函数
添加属性的方法

什么是函数

// 函数是否也可以? -- 了解一下function add(num1,num2){return num1+num2;}add.sex='male';add.setSex=function(sex){this.sex = sex;}console.log(add.sex);//maleconsole.log(add.setSex('female'));console.log(add.sex);//femaleconsole.log(add(1,4));
函数的定义:三种
//字面量 function声明function add(){}add();//var赋值表达式var add = function(){};add();//构造函数 必须是字符串形式 效率比较差,首先解析字符串变量 其次再实例化函数var add = new Function('num1','num2','return num1+num2');add();//预加载// console.log(add());// function add(){// return 1;// }// var add = function(){// return 1;// };// console.log(add());//因为JavaScript中没有块级作用域的概念 {}只是代码块// if (true) {// function add(){// }// } else {// function jian(){// }// }//这种是不不运行的 不被允许的如果要运行的话得用()把函数包裹起来
// 只要function不打头,就可以调用(function(){console.log(1);})();+-~!function(){console.log(2);}();console.log(function(){return 3;}());
递归调用 — 阶乘
递归调用 最经典的例子阶乘
5! = 54321=120;
4! = 5321=24;
5! = 54;
function factorial(num){if (num<=1) {return 1}return num*factorial(num-1);//return 5*4!}console.log(factorial(5));console.log(factorial(4));
var operation = {add:function(num1,num2){return num1+num2;},substract:function(num1,num2){return num1-num2;},'@':function(){console.log('@');},key:function(){}};var key = 'add';//把add函数赋值给了key 调用变量 点是不行的,必须使用[]// console.log(operation.key(1,2));console.log(operation[key](1,2));

参数的使用
function add(num1,num2){return num1+num2;}add(1,2);// 形参 = 实参// num1 = 1// num2 = 2var person={};function setPerson(obj){obj.name = 'xm';}setPerson(person);console.log(person);//就是将person对象的地址,赋予给obj 他们俩指向同一个引用// obj = person;
幂运算

参数的个数
形参 == 实参
function add(num1,num2){return num1+num2;}add(1,2);
实参 < 形参
//需求:// 1、如果只传入一个值,表示默认计算2次幂// 2、如果传入2个参数,表示计算几的几次幂//if else// function pow(base,power){// if (!power) {power=2;}// return Math.pow(base,power);// }// console.log(pow(3//9// console.log(pow(3,3));//27// function pow(base,power){// // if (!power) {power=2;}// //或运算:两个都是假才为假 只要有一个真就是真// // power = power || 2;// return Math.pow(base,power);// }// console.log(pow(3));//9// console.log(pow(3,3));//27
实参 > 形参
function add(){//arguments类数组 -- add(1,2,3) arguments[0]=1 arguments[1]=2if (arguments.length==0) {return;}var sum = 0;for(var i=0;i<arguments.length;i++){sum+=arguments[i];}return sum; //类数组 不是数组}console.log(add());console.log(add(1,2,3,4,5));//15console.log(add(1,2,3));//6
arguments
类数组 不是数组,只是类似数组,是类似数组的对象。
{'0':1,'1':2,'2':3,length:3}
使用
function fn(name){arguments[0]="";console.log(name);}fn('xm');//空字符串 arguments和我们的形参都指向了同一个值。function add(num1,num2){alert(arguments.callee);//弹出函数本身return num1+num2;}add();
阶乘
function jiecheng(num){if (num<=1) {return 1}return num*arguments.callee(num-1);}console.log(jiecheng(5));//120 5*4*3*2*1console.log(jiecheng(4));//24 4*3*2*1//use strict 严格模式下 无法使用argumentsvar jiecheng = function fn(num){if (num<=1) {return 1}return num*fn(num-1);}console.log(jiecheng(5));//120console.log(jiecheng(4));//24
什么可以作为参数
//什么都没有function fn(){}//数字function add(num1,num2){return num1+num2;}add(1,1);//jquery 字符串$('p')
参数的返回值
- 参数 — 函数的输入
- 返回值 — 函数的输出
return用在函数中
return 使用在函数中的1、return; 结束2、return num sum 将值返回3、return 一般情况下放在最后,因为return后面的代码将不再执行
continue用在循环中,表示跳出本次循环
for(var i=0;i<10;i++){if (i==4) {continue;}console.log(i);}
break用在循环中,表示跳出循环
for(var i=0;i<10;i++){if (i==4) {break;}console.log(i);}console.log("我跳出来了");
