优雅的JavaScript-基础语法详解

来源:互联网 发布:ppt数据总结模板 编辑:程序博客网 时间:2024/06/05 13:29

表达式和运算符

表达式:表达式用于JavaScript脚本运行时进行计算的式子,可以包含常量、变量、运算符运算符:操作数据值的操作符   算术运算符:+、-、*、/、%   一元运算符:++、--   ......

算符运算符

1.+   1.如果两个操作符都是数值,执行常规的加法计算   2.如果有一个操作数是字符串,规则如下:       1.如果两个操作数都是字符串,将两个操作数拼接       2.如果只有一个操作数是字符串,则将另一个数转换成字符串,再将两个字符串拼接起来   3.如果有一个操作数是对象、数值、Boolean,则需要调用他们的toString()方法取得相应的字符串值      注意:         Undefined   /null调用string()方法将其转换成“Undefined”、“null”2.-   1.如果两个操作数都是数值,进行常规的减法,并返回结果   2.如果有一个操作数是字符串、Boolean、null/Undefined则需要调用number()函数将其转换成数值,根据前面的规则进行减法       注意:          如果转换的结构是NaN,减法的结果就是NaN   3.如果操作数是一个对象,则调用对象的valueOf()方法取得表示该对象的数值      1.如果值为NaN,减法的结果解释NaN      2.如果对象没有valueOf()这个方法,则调用toString()方法将得到的字符串转成数值,在进行常规计算            3.*基本:    1.如果操作数都是数值,进行常规计算       1.1   如果两个都是正数,结果是正数       1.2  如果只有一个有操作符号,那么结果为负数       1.3  如果乘积成果了ECMAScript数值的表示范围,返回Infinity或者-Infinity特殊的规则:    1.如果操作数为NaN,结果为NaN    2.如果是Infinity和0相乘,结果为NaN    3.如果Infinity与非0数值相乘,结果为Infinity或负Infinity,取决于有符号操作数的符号    4.如果Infinity和Infinity相乘,结果为Infinity    5.如果操作数不是一个数值,则需要调用number()方法将其转换成数值,在进行上面的规则   4./特殊:   1.如果零被零除,结果为NaN   2.如果有一个非零的有限数被零除,结果为Infinity和-Infinity,取决于有符号操作符的符号   5.%   var result=26%5;//1   1.如果操作数都是数值,执行常规除法计算,返回除得的余数   2.如果被除数是无穷大而除数是有限大的数值,结果为NaN   3.如果被除数是有限大的数值而除数为0,结果为NaN   4.如果Infinity被Infinity除,结果为NaN   5.如果被除数是有限大的数值而除数是无穷大的数值,结果为被除数   6.如果被除数为0,结果为0;   7.如果有一个操作数不是数值,在后台调用Number()方法,将其转换成数值,在进行上面的运算      

一元运算符

1.只能操作一个值的操作符叫做一元运算符2.自增++  自减--  在赋值操作时,     1.1  如果递增或递减运算符前置,那么前置的运算符会先累加或累减在赋值     1.2  如果递增或递减运算符后置,那么后置运算符则先赋值在累加或累减        如:      var box=100;      var age=++box;  101      var height=box++;   100    3.其他类型应用一元运算的规则    var box='89'; box++    数值字符串自动转换成数值   //90    var box='ab'; box++    字符串包含非数值转成NaN 、//NaN    var box=false; box++   false转成0,  1    var box=2.3;   box++   直接加1,   3.3  例如:   var a=9;     var  b=++a;     a=a+1;     alert(a+" "+b)

赋值运算

1.定义:将右边的值赋给左边的变量2.复合操作;+=、-=、*=、/=、%=如:  var num=10;    num=num+10  等价于num+=10;

比较运算符

1.比较运算符的结果Boolean类型(>、>=、<、<=)2.当关系操作符的操作数使用了非数值,需要进行数据转换,完成相对应的功能    1.1  如果两个数都是数值,则执行数值比较    1.2  如果两边都是字符串,比较的是字符串对应的字符编码值    1.3.如果一个操作数是数值,则将另一个操作符转换成数值,进行比较    1.4 如果一个操作数是对象,则需要调用对象的valueOf()方法,如果没有则调用toString(),将得到的结果根据前面的规则进行比较    1.5 如果一个操作数为Boolean类型,需要将其转换成数值,在进行比较    

等于==规则

1.如果两个类型相同,进行==比较2.如果操作数为非数值,需要遵循以下规则:   1.1  一个操作数为Boolean,比较前需要将其转换为数值类型   false:0   true:1   1.2 一个操作符为字符串,先转成数值类型在比较   1.3  一个操作符为对象,则现代用valueOf()、toString(),将返回值进行比较   1.4 在不需要任何转换的情况下,null / Undefined 是相等的,       注意:这两个值在进行比较时,不能进行类型转换   1.5 一个操作数为NaN,则==返回false   != 返回true   和自身不等      

恒等于===的规则

1.如果类型不相同,就不相等2.如果两个都是数值,并且是同一个值,那么相等  注意:     2.1  如果其中至少一个NaN,那么就不相等,判断一个值是否是NaN,用isNaN()方法3.如果两边都是字符串,每个位置的字符都相等,那么相等,反之不相等4.如两边的值为true 或 false 则相等5.如果两边的值都引用同一个对象或函数,那么相等6.如果两边的值为null或者undefined 那么相等     

其他的运算符

typeOf运算符   typeOf运算符用来返回一个字符串,返回的是操作数的数据类型   对一个值使用typeOf  操作符可能返回字符串      1.“Undefined”   该值没有定义      2.“Boolean”    该值是Boolean值      3.“string”   该值是字符串      4.“number”   该值是数值      5.“Object”   该值是一个对象或者null      6.”function“   该值是一个函数        

逻辑运算符

逻辑非!逻辑非操作符遵循以下规则:  1.如果操作数是一个对象  ,返回false  2.空字符串   true  反之为false  3.数值为0,返回 true  4.任何非0(包括Infinity)   返回false   5.null   返回true  6.NaN   true  7.undefined   true  逻辑与&和&&(短路)  第一个操作数    第二个操作数   结果  true           true        true   false         true        false  true          false       false  false         false      false    2.逻辑与操作可以应用于任何类型的操作数,而不仅仅是Boolean,在一个操作数不是Boolean类型的情况,逻辑与就不一定返回Boolean     遵循以下规则:        1.如果第一个操作数为对象,则返回第二个操作数        2.如果第二个操作数是对象,则只有第一个操作数的求值结果为true的情况下才会返回该对象        3.如果两个操作数都是对象,则返回第二个操作数        4.有一个操作数为null,返回null        5.如果有一个操作数为NaN,返回NaN        6.如果有一个操作数为Undefined则返回Undefined         逻辑或|和||(短路)  第一个操作数    第二个操作数   结果  true           true        true   false         true        true  true          false       true  false         false       false特殊规则:   1.如果第一个操作数为对象,则返回第一个操作数   2.如果第一个操作数的求值结果为false,则返回第二个操作数   3.如果两个操作数都是对象,则返回第一个操作数   4.有两个操作数为null,返回null   5.如果有两个操作数为NaN,返回NaN   6.如果有两个操作数为Undefined则返回Undefined

三目运算符

称之为条件运算符是ECMAScript中功能最多的运算符他的形式和Java中一样variable=boolean_ex?true:false;例如:   var iMax=(iNUm1>iNUm2)?iNUm1:iNum2;

条件语句

1.语句2.条件语句3.if语句4.switch语句

语句

定义:   ECMA规定一组语句(流程控制语句)   语句定义了ECMAScript中主要的语法    条件语句:   1.if语句   2.switch语句 循环语句:    1.while循环语句    2.do...while语句    3.for循环语句   

条件语句

概念:   通过制定判断的表达式的值来决定执行还是跳过某些语句      这些语句是代码的决策点,称之为“分支” 第一种格式:   if(条件){     //代码块   }      当代码块只有一条语句时,可以省略大括号                  这其中的条件可以是任何的表达式,计算的结果不必是Boolean,ECMAScript,会将其转换成Boolean值      第二种:  if(条件){    //代码块1  }else{    //代码块2  }     第三种:     多重if语句    if(条件){    //代码块1  }else if(条件){    //代码块  }  else{    //代码块2  }         第四种:      嵌套if        if(条件){          if(条件){           //代码块           }        } 

switch语句

switch语句的语法:   switch ()   case value:  statement;   break;    case value:  statement;   break;   default :statement      特点:      1.可以在switch语句中使用任何类型的数据        每一个case的值不一定是常量,可以是变量,表达式      2.每个case按照顺序被求值,直到找到匹配的值或者遇到default语句为止      3.在比较时会使用全等操作符,因此不会发生类型转换(字符串“10”和数值10 不相等)      4,default可以省略      5.break可以省略,穿透         共同点:在一定程度上可以通用  if和switch区别:     1.if一般用于区间、逻辑判断        switch多用于等值比较     2.if使用时嵌套尽量少用,            

循环语句

1.循环语句2.特殊流程控制语句3.二重循环语句4.label语句循环的四个部分:    1.循环变量初始化    2.循环判断条件    3.循环体    4.迭代部分(循环变量增加或减少的处理)

while循环语句

格式:   循环变量的初始化:    while(询函条件){      循环操作;      迭代语句;          }

do..while循环

格式:循环变量的初始化;   do{     循环操作;     迭代语句;             }while(循环条件);         do...while和while的区别:       1.do....while至少执行一次       2.do...while(表达式)的后面一定要有一个分号,用来表示语句的结束                            

for循环

格式:  for(var box=1;box<=5;box++){    alert(box);  }循环顺序:    1.声明变量var box=1;    2.判断条件    3.执行语句体    4.判断循环条件        

加强for

格式:   for(vriable in object){     statement   }   说明:     vriable:通常是一个变量名或表达式或者是var 声明的变量     object:表达式,计算结果是一个对象     通常用枚举对象的属性         

特殊流程控制语句

1.break:2.continue

label语句

语法:   标签名:for(表达式1;表达式2;表达式3){     break 标签名;     或者continue 标签名        }例如:  <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Title</title></head><body><script type="text/javascript">  for(var i=0;i<5;i++){     bk:     for(var j=0;j<5;j++){         if(i==1&&j==1){             break bk;         }         document.write(i+"  "+j+"<br/>")     }  }</script></body></html>总结:    for循环、while循环、do...while循环、for-in    1.可以相互转换    2.可以相互嵌套    3.特殊流程控制语句,可以在其使用    4.循环中可以嵌套分支语句,分支语句也可以嵌套循环    

函数

函数的概念和作用

1.概念:函数就是把完成特定功能的一段代码封装起来,给该功能起一个名(函数名) 注意:函数可以在任何地方调用 2.作用:    1.使程序变得更简洁和清晰    2.便于维护    3.可以提高程序的开发效率    4.提高了代码的重用性 说明:    不使用函数,JavaScript代码必须执行,且执行的时间,执行的部分不可控,使用函数后浏览器不会直接去执行它,只有在调用该函数时才会被浏览器执行          

函数的分类

1.官方定义函数:   alert();   parseInt();   parseFolat();   isNaN();2.自定义函数:   用户根据自己的需求定义的函数

函数的命名规范

1.函数名不能包含特殊字符2.函数名最好含义明确3.函数名称最好遵循驼峰标记法或者下划线法4.函数名严格区分大小写5.函数名如果产生重复会覆盖

函数的定义

格式:   1.无参数:     function 函数,名(){       js代码;     }        2.有参数   function 函数名(形式参数列表){     js代码;   }      3.匿名函数   function(){     js代码;   }      4.有返回值的函数   function 函数名(形式参数列表){     js代码;     return 返回值;        }     总结:     1.函数需要使用function关键字,必须写     2.函数名---标识符,     3.参数列表只有变量名,没有var关键字        无参函数        只有一个参数        有多个参数     4。{函数体}:         1.有返回值的函数         2.没有返回值的函数   

函数的实参和形参

1.实参和形参:     形参---就是函数在定义时,函数名后面的参数,不能使用var关键字     实参---就是调用时,函数名后面的参数2.传参---赋值:将实参的值赋给形参3.JavaScript语言的特殊之处:   1.不检查实参的类型,不检查形参的个数   JavaScript语言与大多数语言在函数参数上是不一样   JavaScript语言不在乎你传入参数的个数和类型   在JavaScript每个函数的函数体重都有一个arguments对象来访问这个函数的参数,从而获取所有传过的参数4.JavaScript语言可以传入任意多个参数   

函数参数的类型

1.值类型的数据作为参数传递的时候,相当于操作值的副本2.引用传递操作的是参数本身例如:<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Title</title></head><body><script type="text/javascript">    var a=3,b=5;    var c=a;   //a:3   b;5  c:3    a=b;   // a=5    b=c;    //b:3//实现两个变量值交换的方法    //a,b就是形式参数,代表两个数据    function change(arr){        var c=arr[0];        arr[0]=arr[1];        arr[1]=c;    }        var people=new Object();//people 是对象  引用类型    people.name=“李四”;        change(people);        </script></body></html>

函数的返回值

函数的返回值可以返回:   number string boolean null undefined object   注意:  当函数没有返回值时,其实返回值为undefined例如: <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Title</title></head><body><script type="text/javascript">    /*var flag=confirm("确定删除吗?");    alert(flag);    var a=alert("dgshj")*//*    function test(a,b){       var result=a-b;       return result;//注意return 只能在函数中使用,代码执行到return就结束这个函数    }var num=test(3,5);alert(num);*///求三个数的最大值    function getMax(a,b,c) {        //用return把参数不是数值的情况给排除,并返回提示信息        if (typeof(a) != "number" || typeof(b) != "number" || typeof(c) != "number")        {            return "参数必须都是数字";        } var max=-Infinity;        var min=Infinity;        if(a>max){            max=a;        }        if(b>max){            max=b;        }        if(c>max){            max=c;        }        if(a<min){            min=a;        }        if(b<min){            min=b;        }        if(c<min){            min=c;        }return "最大值:"+max+",最小值:"+min;    }alert(getMax(21,40,-4));</script></body></html>

函数的调用

1、函数名(参数)调用   1.1  通过函数名()进行调用,如果有参数产地相对应的参数即可   1.2  在HTML中默认的全局对象是HTML页面本身,所以函数是属于HTML页面,在浏览器中的页面对象是浏览器窗口(window对象)2.事件驱动:   所有的函数没有调用不会执行,那么函数调用的源头就是事件,之前学过点击事件onclick   成为焦点onfocus  失去焦点  onblur3.如:window.函数(参数):    注意:       1.在函数体内可以调用另外一个函数       2.函数可以自己调自己(递归)        全局对象:    1.当函数没有被自身对象调用时,this的值就变成全局对象      在web浏览器中全局对象是窗口对象(window对象)    2.函数作为全局对象的调用,会使this,window对象成为全局对象,会使程序容易崩溃      注意对象:    1.函数可以有一个或多个参数,也可以没有    2.函数可以通过return加返回值,如果没有return,默认返回undefined    3.函数不调用不执行    4.JavaScript对大小写敏感,关键字function  必须小写    ,并且必须与函数名相同的大小写来调整函数

变量的作用域

定义:变量起作用的范围,变量的有效范围局部变量:在函数内部的变量,形参也是局部变量全局变量:在函数外部的变量,作用域范围是当前文件的任何地方说明:    1.JavaScript的变量的作用域是根据方法块来划分的,也就是function的大括号来划分的       注意:function块是划分标准,而for/while并不是作用域的划分标准    2.JavaScript在执行前会对整个脚本文件的声明部分做完整的分析(包括局部变量),从而确定实变量的作用域    3.当全局变量跟局部变量重名时,局部变量的作用域会覆盖全局变量的作用域    4.全局变量位于全局区,局部变量位于栈区

匿名函数

定义函数的两种格式:1.function 函数名(){ //函数体}   2.匿名函数var fun=function(){  //函数体}匿名函数的用处:  1.函数表达式可以储存在变量中,变量可以作为一个函数使用,也可以将匿名函数作为参数传递给其他函数,    如果需要完成一次性的任务,可以用匿名函数        

函数的重载

定义:重载函数时函数的一种特殊情况:允许在同一个范围内声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数或类型或顺序)必须不同,也可以说同一个运算符完成不同的运算功能,称之为重载函数  1.函数有不同的参数  2.函数有不同的参数类型  但是在JavaScript语言中,如果函数名一样会出现覆盖的情况,无法实现函数的重载  JavaScript并没有重载函数的功能,但是arguments对象可以模拟重载    JavaScript中每个函数都会有一个arguments对象实例arguments,他引用着函数的实参,可以用数组的下标方式“[]”引用arguments的元素    arguments.length为函数实参的个数    arguments.callee引用函数自身

arguments

定义:   arguments对象不能显示创建,只有函数开始时才可用   函数的arguments对象并不是一个数组,访问单个参数的方式与访问数组元素的方式相同   索引n实际就是arguments对象的0~n属性的其中一个参数。      注意:   1.arguments的length属性返回调用程序传递给函数的实际参数数目   2.arguments的0~n属性返回一个arguments对象中的各个参数的实际值,相应的值由一个正在执行的函数的arguments属性返回

递归

定义:在函数体内调用本函数递归的满足条件:   1.函数自己调用自己   2.要有出口   3.尽量层层递进   注意:      处理不当就如死循环,递归函数只有在特点的情况下使用

数组

1.数组定义:  值的有序集合,美誉个值都叫做一个元素,每一个元素在数组中都有一个位置,以数字表示,叫索引  特点:   1.JavaScript数组是无类型的,数组的元素可以是任意类型,并且同一个数组中的元素可以是不同类型,   2.ECMAScript语言中数组的长度是可以动态变化的,可以添加和删除元素   3.Array数组是数据的有序列表,索引从0开始   4.ECMAScript同一个数组可以存储不同类型的数据,也可以没有类型,但每一个数组都有length属性   

数组的创建

1.数组字面量方式:  //创建3个字符串的数组  var aColor=["red","yellow","blue"];  //创建空数组   var aColor=[];       var aColor=[1,2,3,];    bug:       在IE8以及之前显示的个数为4个       IE9,ff,chrome,opera中显示是3个,不要用这种方式去创建数组  注意:    省略数组中的某个值,默认值为undefined        2.构造函数方式://创建一个空函数 var aColor=new Array(); //创建一个容量为20 的数组  var aColor=new Array(20);//创建一个包含3个字符串元素的数组 var aColor=new Array("red","yellow","blue");  注意:    1.最后一个元素不可以加逗号,会报语法错误    2.使用构造函数法创建数组时,如果只传一个值,这个值是number类型,那么必须是大于等于0的整数,否则语法报错    3.使用构造函数创建数组时,可以省略new关键字(不建议)

数组的长度

length属性:表示数组的长度不同:   JavaScript数组的length属性是可变的,     1.当length被设置的更大时,整个数组的状态事实上不会发生变化,仅仅是length属性值变大     2.当length属性被设置的比原来更小时,则原先数组中国索引大于或等于length元素的值会全部丢失     3.length属性不仅可以被显示设置,他也可以被隐式修改     注意:   1.数组的length属性不是只读的,可以通过数组的length属性向数组的末尾扩大数组的容量,或者可以从数组的末尾移除其他元素   

数组的遍历

定义:获取数组中的每一个元素1.for循环for(var i=0;i<arr.length;i++){  //代码块}2.加强for循环for (var i in arr){  //代码块}3.forEach:是对数组中每一个元素进行函数体的操作   是ECMAScript5.0新特性   注意:forEach不支持break/continue语句   在低版本的IE中也无法使用      

数组中的常用方法

<!DOCTYPE html><html><head>    <meta charset="UTF-8">    <title>demo</title></head><body><script type="text/javascript">var arr=["21sd",23,6,0,-2];var str=arr.join("///");//1.join(连接符字符串),无参的时候默认使用“,”链接,返回值时连接后的字符串,操作对数据并没有影响//alert(typeof str+"  "+str);//alert(arr);    var arr2=str.split("///");    var s="abc13";// 2.   arr2=s.split("");//alert(arr2);//要在页面输入一个用户名,判断这个用户名是否全部由字母组成    //数组元素倒置,返回倒置之后的结果,该倒置度数组本身有影响reverse()//    alert(arr.reverse());//alert(arr);//3.sort()  返回排序之后的结果,对齐数组本身有影响//    3.1  sort()无参,按照字符的先后顺序排序//    3.2  sort()有参   参数必须是一个函数//var arr2=[11,22,3,4,56,-54353,555]//arr2.sort(test)//alert(arr2);//   function test(a,b) {//       return a-b;//   }//4.concat();参数可以是任意类型,表示吧参数都链接到原数组上,返回新的数组,该链接对原数组并没有影响、//参数是一个数组时,则将数组中的元素链接到原始数组上//alert(arr.concat(111,"哈哈哈"));//var newArr=arr.concat([false,true]);//alert(newArr[5]);/*5.slice():      1.slice():返回值是截取数组的一部分,截取对原数组无影响      2.slice():只有一个参数的时候是起始下标,表示当前的位置一致截取到最末尾      3.slice():如果有两个参数,第二个参数表示终止下标,截取时会包含起始下标上的字符,不包含终止下标上的字符    注意:      如果下标为负值,责先讲该负值+length获取一个正值,在截取*///alert(arr.slice(2,2))//alert(arr.slice(1,3));   /* 6.splice():返回值为删除掉的元素组成的新数组,删除会对原数组产生影响,数组的长度也会收到影响splice():第一个参数表示起始下标,负值责+length在作为起始下标    第二个参数表示要删除元素的个数,如使负值等同于0;    之后的参数表示要插入的数据,如果该方法只有一个参数,表示从起始下标一直删除到末尾    *///    alert(arr.splice(-2,2,false,true,"ddd"));/*var arr3=[1,3,2,5,2,65,1,2,3,3,3,3];for(var i=0;i<arr3.length;i++){    for(var j=i+1;j<arr3.length;j++){        if(arr3[j]==arr3[i]){            arr3.splice(j,1);        }    }}alert(arr3);*//*7.push():项数组的末尾追加元素,返回追加元素后数组的长度,       参数可以是一个或多个,表示要追加的数据,追加对原数组产生影响*///alert(arr.push(false,true));//alert(arr);//    8.pop():表示从数组的末尾往外弹出数据//alert(arr.pop());//9.map();//    var arr=[1,2,3,5,7];//    var newArr=arr.map(function (x,index,ar) {//        return x%2;//    })//10.filter()://11.reduce//12.some();   /* 13.indexOF():在一个数组中查找子元素,若存在,返回该元素的下标,若不存在则返回-1;    注意:indexOF():从左到右查找,并且只查找一次*/var arr=[1,4,"dsdf",true,"呵呵呵",-234,3];//alert(arr.indexOf(5));//  13.lastIndexOf():从末尾开始查找    var result=arr.lastIndexOf(3);alert(result);14.unshift();向数组的头部插入一个或多个元素,     参数:需要插入的值     返回值:新数组的长度,会改变原来数组的长度</script></body></html>

数组排序

冒泡排序   1.比较相邻的元素,如果第一个比第二个大,就交换他们两个   2.对每一个相邻元素做同样的工作,从开始的第一对到结束的最后一对选择排序:<!DOCTYPE html><html><head>    <meta charset="UTF-8">    <title>demo</title></head><body><script type="text/javascript">var arr=[2,5,0,-1,6];for(var i=0;i<arr.length-1;i++){    for(var j=0;j<arr.length-1;j++){        if(arr[j]>arr[j+1]){            var temp=arr[j];            arr[j]=arr[j+1];            arr[j+1]=temp;        }    }}for(var i=0;i<arr.length;i++){    var max=arr[i];    var index=i;    for(var j=i+1;j<arr.length;j++){        if(arr[j]<max){            max=arr[j];            index=j        }    }}function text(a,b) {    if(a>b){        return -1;    }else if(a<b){        return 1;    }else {        return 0;    }}arr.sort(text);    alert(arr);</script></body></html>

原创粉丝点击