JavaScript核心语法学习部分(三)
NaN==NaN?//false NaN和任何数据比较,永远返回false,今后只要可能判断NaN时用isNaN(x)
1 var str="Hello"; 2 str>10; 3 str>1000;
上面的结果是false,Hello转不成数字,转为NaN,和任何数字比较返回false
关系运算中:字符串比数字,字符串转为数字!
1 var a=10; 2 var b=10; 3 b=b+1;//a=11 4 console.log(a++>b++);//false 6 console.log("a="+a);//11 7 console.log("b="+b);//11
使用变量出错的情况:没有声明的变量,只要使用就会出错。如果声明未附值,会返回undefined!(在逻辑运算中)
举例:
1 var userAge=10; 2 var userName; 3 A:console.log(userAge++>10)&&(userName=="Tom"); 4 B:console.log(userAge++>=10)&&(userName=="Tom"); 5 C:console.log(++userAge<10)||(userName=="Tom"); 6 D:console.log(++userAge<10)||(userName=="Tom");
函数:(方法)封装执行一项专门任务的步骤的代码序列;(打饭案例)
何时定义方法:只要发现一段代码重复使用,就封装为方法。(任何语言一次定义处处使用,一次修改处处生效);
语法:
function 方法名(参数列表){
方法体:步骤清单
return 返回值;
}
参数:方法内独有的变量,接收传入数据,在方法内处理。多个参数使用逗号隔开
参数何时创建:只有方法被调用时才自动创建。
返回值:方法执行完成后,由方法返回的一个数据
定义返回值:不用再声明变量,直接用return值!(return本意退出方法,退出同时,可返回数据!)带有返回值的方法,使用时,等效于直接使用返回值数据;
为什么定义返回值:因为调用方法的人需要明确的返回结果,主要给调用者使用。
案例1:打饭
1 function buy(what/*菜名*/){ 2 console.log("取饭盒"); 3 console.log("走到食堂"); 4 console.log("找窗口"); 5 console.log("回宿舍"); 6 console.log("取饭盒"); 7 what="香喷喷的"+what 8 return what; 9 } 10 var jy1=buy("饺子"); 11 console.log("jy1"); 12 var jy2=buy("盖饭"); 13 console.log("jy2");
案例2:三数比大小(a/b/c取最大值,使用三目运算方法)
1 var a=5; 2 var b=3; 3 var c=8; 4 function getMax(a,b,c){ 5 var max=a; 6 max=a>b?a:b; 7 max=max>c?max:c; 8 return max; 9 } 10 console.log("最大是:"+getMax(a,b,c));
作用域:一个变量的可用范围!
全局作用域:直接放在全局作用域中的变量,叫做全局变量。只要希望所有作用域共用的变量都要声明在全局作用域。
Window对象:是整个网页的全局作用域对象
局部(函数)作用域:声明在方法内部的变量或者是方法的参数变量都叫做局部变量。
值传递:将一个变量的值附值给另外一个变量,其实将原变量的值,复制一份给新的变量。JS中一切附值都是值传递!
对未声明的变量赋值:js会自动在全局创建该变量!(全局污染)
函数作用域和变量作用域完全一样,声明在哪就只能在哪个范围内使用。
函数作用域在调用方法时创建,在方法执行时立刻销毁。
案例1:局部变量的获取
var washer="洗衣机"; function fun(){ var yg="我的衣服"; console.log(yg); console.log(washer); } fun(); console.log(yg);//RefError
案例2:全局污染
1 var sum=0; 2 function add(){ 3 sum+=3; 4 console.log(sum);//3 5 } 6 add(); 7 console.log(sum);//3
自定义函数:
全局函数:ECMAScript定义了标准,由各浏览器厂商已经实现的函数,可以直接调用。isNaN(x) parseInt/Float(x)
encodeURI:将url中的非法字符转为单字节符号——编码
decodeURI:将encodeURI转后的字符串,转换回原文——解码
unicode编码:每个字符2字节 utf-8编码:字母、数字单字节 汉字三字节。
url规定参数值中,再次出现保留字,就是非法,保留字:/ ? :...
encodeURIComponent:既能对多字节非法字符编码,又能对单字节非法字符编码——今后只要使用component就够了。
何时使用?将数据通过url发送时,都要先编码再发送。
decodeURIComponent:对encodeURIComponent编码的字符串解码,收到编码后的字符串后,都要先解码,再处理。
eval():专门执行字符串格式代码。
程序结构:3种。顺序结构;分支结构;循环结构
案例1:收银系统v1;
1 var price=parseFloat(prompt("请输入单价")); 2 var count=parseFloat(prompt("请输入数量:")); 3 var money=parseFloat(prompt("请输入收款金额:")); 4 var total=price*count; 5 total=total>=500?total*0.8:total; 6 var change=money-total; 7 document.write("应收金额:"+total.toFixed(2)); 8 document.write("找零:"+change.toFixed(2));
分支结构:程序运行过程中,可以根据不同的条件,执行不同的任务。
分支结构:
if...结构:1件事,要么做,要么不做
if...else...结构:2件事,二选一执行
①if语结构:
语句0;
if(逻辑表达式){
语句1;
语句2;
}
语句3;
1.执行语句0;
2.判断逻辑表达式的值:
如果值为true,则执行if语句块中的语句;
如果值为false,则不执行if语句块中的语句;
3.执行语句3
案例:收银系统v2;
1 var price=parseFloat(prompt("请输入单价")); 2 var count=parseFloat(prompt("请输入数量:")); 3 var money=parseFloat(prompt("请输入收款金额:")); 4 var total=price*count; 5 if(total>=500){ 6 total*=0.8; 7 } 8 var change=money-total; 9 document.write("应收金额:"+total.toFixed(2)); 10 document.write("找零:"+change.toFixed(2));
②if...else...结构
语句0;
if(逻辑表达式){
语句块1;
}else{
语句块2;
}
语句3;
1.执行语句0;
2.判断逻辑表达式的值:
如果值为true,则执行语句块1;
如果值为false,则执行语句块2;
3.执行语句3;
案例:收银员系统V3;
1 var price=parseFloat(prompt("请输入单价")); 2 var count=parseFloat(prompt("请输入数量:")); 3 var money=parseFloat(prompt("请输入收款金额:")); 4 var total=price*count; 5 /*if(total>=500){ 6 total*=0.8; 7 }*/ 8 if(money>=total){ 9 var change=money-total; 10 document.write("找零:"+change.toFixed(2)); 11 }else{ 12 var change=total-money; 13 document.write("还差:"+change.toFixed(2)); 14 };
③if...else...的嵌套(else...if..结构);
else...if...结构:多件事,多选一执行;
语法:
if(条件1){
//满足条件1执行的代码;
}else if(条件2){
//满足条件2执行的代码;
}else if(条件3){
//满足条件3执行的代码;
}
...
else if(条件n){
//满足条件n执行的代码;
}else{
//以上条件都不满足执行的代码;
}
如果前一个else if 条件已满足,则后续的else if都不满足。
案例:多条件满足执行语句。
1 var score=parseInt(prompt("请输入分数:")); 2 if(score>=90){ 3 alert("A"); 4 }else if(score>=80){ 5 alert("B") 6 }else if(score>=60) { 7 alert("C") 8 }else{ 9 alert("D") 10 };
分支结构中的条件,可以不是逻辑表达式!如果不是js会自动转换为Boolean类型:
0 null undefined NaN " " 0.0都转为false,其余都转为true!