Number()/parseInt()/parseFloat()/alert()/prompt()...
函数分为系统函数和自定义函数
函数:是一个功能体,需要提供若干个数据,返回结果,用于封装重复执行的代码 —— 煎饼机
function 函数名称(){ 函数体 —— 封装的代码}
function laba(){ //函数体 console.log('又香又脆的煎饼'); console.log('所有煎饼一律15折'); console.log('快来买吧'); } //调用 //laba();
function 函数名称(参数列表){ //用于接收外部传递的数据 函数体}
函数名称(参数列表) //实际传递的数据
创建函数时的参数称为*形参*,调用函数时的参数称为*实参*,实参会赋值给形参,形参的数量可以和实参的数量不匹配,如果形参未赋值为undefined
function add(a,b){//形参 //console.log(a+b); console.log(a,b); }
function 函数名称(参数列表){ 函数体 return 值; //返回值,函数调用后得到的结果}
return用于函数调用后得到的结果,如果函数中没有return或者return后没有加值,得到的结果是undefined;一旦return执行,就会跳出函数,结束函数的执行。
function getMax(a,b){ //判断a和b的大小 /* if(a>b){ return a; }else{ return b; } */ return a>b ? a : b; }
使用switch-case
1-等待付款 2-等待发货 3-运输中 4-已签收 5-已取消 其它-无法追踪
*对比return和break*return是用于跳出函数,结束函数的调用break是用于跳出循环、switch-case,结束对应语句的执行
//练习:创建函数getStatus,传递订单的状态码,返回对应的汉字状态 //使用switch-case //1-等待付款 2-等待发货 3-运输中 4-已签收 5-已取消 其它-无法追踪 function getStatus(n){ switch(n){ case 1: return '等待付款'; //break; case 2: return '等待发货'; //break; case 3: return '运输中'; //break; case 4: return '已签收'; //break; case 5: return '已取消'; //break; default: return '无法追踪'; } }
练习:创建函数isRun,传递任意一个年份,返回是否为闰年(布尔型的值)
局部变量:在函数内的作用域称为函数作用域,里边的变量就是局部变量
全局变量:在函数外的作用域称为全局作用域,默认一个js文件下就是在一个全局作用域下,里边的变量就是全局变量
局部变量只能在当前的函数作用域下访问到,全局变量可以在任意的作用域下访问到
在函数中不加var声明的变量是全局变量 —— 不推荐
变量提升,程序执行前,将var声明的变量提升到所在作用域的最前边,赋值不提升
全局函数:在*全局作用域*下创建的函数,可以在任意作用域下调用
局部函数:在*函数作用域*下创建的函数,只能在所在的函数下调用
函数提升:程序执行前,会将函数*整体提升*到所在作用域的最前边
是在函数内调用自身这个函数
递归的使用:要有边界条件(跳出条件或者循环次数),否则是死循环
结合着return
递归解决的是循环的问题。
var count=0; function say(){ console.log('从前有座山'); count++; if(count===3){ //跳出函数,结束函数 return 3; } return say(); //函数内部调用自身 }
function (){ }
函数声明function fn(){ } |
---|
函数表达式var fun=function(){ } |
*函数名称**(**)*和*函数名称*的区别
函数名称() 调用函数,执行一次函数体中的代码,得到返回值
函数名称 代表一个变量,保存了一个函数
练习:使用函数表达式创建函数getSum,计算任意两个数字之间所有整数的和
*对比函数声明和函数表达式的区别*
函数声明存在函数的整体提升,可以先写调用再写创建
函数表达式不存在函数提升,必须先写创建再写调用
//var c=function(){}var c=3;function c(){ console.log(2);}c(); //报错,c不是一个函数
(function(形参列表){ //函数作用域,里边的变量都是局部的,防止全局污染})(实参列表);
(function(a,b){ console.log(a+b); })(3,5);
回调函数是将一个函数(函数名称或者匿名函数)以实参的形式传递
1. 将函数名称以实参的形式传递到函数内部 function tao(madai){ //madai为函数名字,传递函数名后,函数内部可调用 console.log('涛哥开始跑第1棒'); console.log('涛哥到达第1棒终点'); //调用传递进来的回调函数 madai(); } 2.将匿名函数以实参的形式传递进入函数 tao( function(){ console.log('陌生人开始跑...'); } );
function tao(madai){ madai(); //调用传递进来的回调函数}function dong(){ }tao( *dong* )tao( function(){ } )
parseInt/parseFloat/Number
isNaN() 检测一个值转数值后是否为NaN,如果是返回true,不是返回false
isFinite() 检测一个值是否为有限值,如果是返回true,不是返回false(判断一个值是否是无穷大)
只有无穷是无限值,其它都是有限值
3/0 // Infinity 无限值
eval() 执行字符串表达式
encodeURI() 对应网址中的中文编码
decodeURI() 对用中文解码
var str = "http://www.jd.com/search?kw=电脑" var str2 = encodeURI(str) 中文编码 var str3 = decodeURI(str2) 对用中文解码
对象属于引用类型的数据
对象是一组属性和方法的集合,具体到某一个
一部手机属性有品牌、型号、颜色、尺寸、内存大小、cpu... 方法有聊天、玩游戏、看视频、办公、学习...
涛哥属性有身高、体重、发色、肤色、户籍... 方法有摊煎饼、养兔子、敲代码、接力赛...
万物皆对象
自定义对象,程序员创建的对象
内置对象,JS提供的对象
宿主对象,根据不同的执行环境划分
对象字面量 {}
内置构造函数 new Object()
自定义构造函数
{ 属性名1:属性值1, 属性名2: 属性值2.... }
//对象字面量 var phone={ brand:'华为', //属性名可不加引号,但是若是有特殊符号(不符合变量命名规则的)必须加引号 color:'黑色', 'size':6.3, '2cpu': '麒麟9900' }; 访问属性方式: 对象.属性名 phone.brand 对象[ '属性名' ] phone["brand"] 如果属性名不存在则返回undefined 修改属性值: phone.color = "白色" phone["brand"] = "vivo" 添加一个不存在的属性 phone.num="P30"; phone["num"]="P30";
属性名的引号可以省略,如果含有特殊字符必须加加引号
对象.属性名
对象[ '属性名' ]
如果属性名不存在则返回undefined
new Object() 返回一个空对象,需要单独的添加每个属性或者方法
使用new调用的函数称为构造函数,返回一个对象。
练习:创建一个员工的对象,包含的属性有编号,姓名,性别,工资
//内置构造函数 //练习:创建一个员工的对象,包含的属性有编号,姓名,性别,工资 var emp=new Object(); //{} emp.eid=1; emp.ename='涛哥'; emp['sex']='男'; emp['salary']=45000; //console.log(emp);
依次访问对象中的每个属性
for(var k in 对象){ k 每一次获取的属性名 对象[k] 属性名对应的属性值}
//遍历属性 //for-in循环 for(var k in emp){ //k每次获取的属性名 console.log(k,emp[k]); }
7.7 判断对象属性是否存在
//练习:创建一个商品对象,包含属性有标题、价格,如果价格存在,在当前基础之上打九折,如果产地属性不存在,添加该属性;最后打印对象 var laptop={ title:'小米Air', price:4300 }; //如果存在 判断方法1:使用hasOwnPropertity方法判断 if( laptop.hasOwnProperty('price') ){ laptop.price*=0.9; } //如果不存在 判断方法2:使用对象.属性的值和undefined对比,true为没有该属性,false为有这个属性 if( laptop.madeIn===undefined ){ laptop.madeIn='中国'; } console.log(laptop); //判断方法3 使用 “属性名” in 对象名 存在返回true,不存在返回false console.log("title" in laptop)
7.7对象的成员方法
var person={ name:'涛哥', //成员属性 play:function(){ //成员方法 //this指的是当前调用方法的对象 console.log(this.name+'正在玩单杠'); }, tan:function(){ console.log(this.name+'正在摊煎饼'); } }; //console.log(person); //调用 //person.play(); //person.tan();
7.7 对象的引用
//销毁引用类型数据,释放内存空间 tao=null;//空地址 dong=null;//空地址