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!

 

posted @ 2017-08-31 13:37  Angche  阅读(180)  评论(0编辑  收藏  举报