语法:
一、关键词:大部分都和java一样除了定义变量全都用的var,函数定义都用function
二、JavaScript的标识符、分隔符、书写风格都和java的一样。
三、注释:javascript的注释只有//和/*,,,,*/,不存在/**,,,,*/
四、数据类型有五种全部都是小写
1、number:相当于java中的short、long、float、int、double类型。
2、boolean:0等价于false,1等价于true,javascript语言和c语言一样有0和非0的区别Boolean还可进行加减的运算,在运算之前会被转换成number类型。
3、object:object是数组中各给定初始值的元素的类型,数组中元素如果为赋初值那么他的数据类型为undefined。
4、string:在javascript中没有字符和字符串的区别,因此字符或字符串都可以用单引号或者双引号表示。
5、undefined:当一个变量被声明但是没有赋值时是undfined类型。
通过typeof()函数可以获得数据的类型。
<script type="text/javascript"> //alert(typeof(1));//number //alert(typeof("c"));//string //alert(typeof("abc"));//string // alert(typeof(2==2));//booelan //alert(typeof('c'));//string // var arr=[1,2,3]; // alert(typeof(arr));//object //var a; //alert(typeof(a));//undefined </script>
五、变量----用关键词var来声明
var x=10;
var y=true;
变量的语法:
1)、js中的变量及时前面定义过,也可以重新定义,并且可以定义为其他类型的变量
2)、多个脚本段之间的变量是同一作用于的相当于全局变量,而在函数定义的变量是局部变量只能在函数体中使用。
3)、变量声明了但是没有赋值,javascript将它初始化成undefined
4)、一个变量没有声明也可以赋值,但是没有声明的变量不可以被使用。
注意:1)、函数内部可以声明和函数外部名字一样的变量,在函数的内部会覆盖掉外部的,但是在外部的变量是不受内部变量影响的。2)、只有函数内部定义的是局部变量,其他的都是全局变量。
var x=10; x=true;//javascript是弱类型,java是强类型 y=10; alert(x+y);//11; alert(x);//挂----javascript中一句语句挂了但是不会影响到前面语句的运行,而java不行一挂全挂
六、前段脚本挂了并不会影响到下一段脚本。
七、常量:javascript中只有直接常量没有间接常量。
八、运算符:
1)、算术运算符:+、-、*、/、++、--、%(其用法和java的一样,其符号是由被除数决定的)
function a1(){ var d=2.2345646; d++; alert(d);//++运算不仅可以用于整数也可以能用于其他类型甚至是boolean类型 var a=2.3; var b=3.7; alert(a+b);//6 javascript是弱运算 a=2; alert(2/100*100);//2 javascript中没有int 和double的区别都是number //特殊的+,- alert("1"+2);//12 alert("2"-1);//1 /*在遇到字符串的运算中如果使用的+号那么起到的是连接字符串的作用。 如果是-号那么先将支付穿变成number类型之后再进行运算*/ alert(true+1);//2 alert(false+1);//1 }
2)、关系运算符:==、!=、>、<、<=、>=和Java的使用方法一致
3)、逻辑运算符:!、&&、||、不存在&、|、^
注意:
var t=1; if(t=-4){//一直为true.javascript中只要非0都是true,是0的话就是false; alert("aaaaaa"); }
4)、位运算符:~(非)、&、|、^、<<(向左移一位乘2)、>>(向右移一位除以2)、>>>(无符号右移)。其用法和Java一致。
5)、赋值运算符:=、+=、*=、/=、%=。其用法和Java一致
6)、条件运算符(三元运算) :表达式1?表达式2:表达式3;
var a=35,b=135; var max=a>b?a:b; alert(max);
九、流程控制
if流程语句中要注意:
if(t=1){//该判断的结果永远为true alert("aaaa"); }
if--else if--else语句中,只会有一个语句块被执行(判断成功后会执行一个语句块,之后将会退出if--else if--else结构,不会再进行判断,不具有执行其他语句的机会)
var a=4; if(a>1){ alert("1111111111");//输出结果 }else if(a>2){ alert("2222222222"); }else if(a>3){ alert("3333333333"); }else { alert("4444444444"); }
swicth流程控制语句
在java中switch的判断只能用于byte、int等整数类型和char类型和jdk7中新增的String类型。
javascript中switch中的判断支持所有的格式。
var x="abc"; switch(x){ case "aa"://字符串要用单引号或者双引号包起来 alert("aaaaaaaaaaaa"); break; case "bb": alert("bbbbbbbbbbbb"); break; case "cc": alert("cccccccccccc"); break; case "dd": alert("dddddddddddd"); break; default: alert("abc"); }
一个小点:在javascript中可以通过id获得数据框中用户输入的数据
var x=document.getElementById("t1").value;十、 数组
数组在javascript中很重要因为它相当于java中的数组和集合。
一维数组:
数组定义方式一:直接赋值
java:int a[]={1,2,3,4,5};
javascript:var a=[1,2,3,4,5];//javascript在声明的数组类型时候没有[],但是数据是用[]封装的。
var arr=[1,2,3,4,5]; alert(arr);
注意:javascript可以直接用数组名输出所有的数组元素。
alert(arr[0]+arr[3]);注意:对于下标的引用和Java的一致。
var arr=[1,3,5]; arr[0]=8; arr[5]=7;
arr[4]="abc;alert(arr);//8,3,5,undefined,undefind,7
注意:1、java中数组的下标是可以越界的,但是javascript就不会因为javascript像当于一个集合,长度可以自动的增长。
2、如果出现中间位置未被赋值的,则它的类型是undefined。
3、javascript总的数组的元素可以是任何的类型。
数组定义方式二:先定义一个空的数组再进行赋值
var arr=[]; arr[0]=1; arr[5]=3; arr[10]=7; alert(arr.length);//获得数组的长度
数组定义的方式三:用new对象的方式创建
var arr=new Array(4); var arr2=new Array(1,2,3,4,5);
注意:当Array()中给定的是一个整数参数,则表示的是数组的长度,如果是一系列的数据则表示的是初始化数组。
二维数组:
var arr=[]; arr[0]=[1,3,5]; arr[1]=[2,5,3,5,6]; arr[2]="abc"; for(var i=0;i<arr.length;i++){ for(var j=0; j<arr[i].length;j++){ document.write(arr[i][j]+" "); } document.write("<br/>"); }
注意:如果将arr[i]一字符串赋值,系统将会自动把字符串变成字符数组。
十一:函数讲解
javascript中定义函数的格式:
function 函数名(){ 函数体; [return 返回值]; //表示可有可无 }
函数的类型有两种:
//1 无参无返回函数 function a1(){ alert("aaa...."); } //2 有参有返回函数 function add(a,b){ var s=a+b; return s; } function a2(){ var ab=add(100,200); alert("ab="+ab); }
javascript函数细节:
js函数的一些小细节---与Java不一样的地方:
1、函数调用与参数
javascript中的函数不存在重载。定义了函数,只要通过他的函数名就可以调用它,
调用与否和参数的个数无关(如果传递的参数的个数少于函数定义的参数个数则其他未被传参的为undefined,
如果传递的参数的个数大于函数定义的参数个数那就支取需要,多余的就不接收)。
注意:1、javascript的函数只以函数名来识别调用,跟参数没关系。
2、每个函数内部都有一个arguments[]用于接收并存储参数
不管函数定义时的参数有没有被定义或者接受。
function show(x,y){ alert(x+","+y); } function a1(){ show(1,8);//1,8 show(1);//a,undefined show(1,2,3);//1,2 show("aa",0.6);//aa,0.6 } function show2(x,y){ alert(x+","+y); for(var i=0; i<arguments.length;i++){ document.write(arguments[i]+" "); } } function a2(){ show2("aa", 0.6, 3, true); }
2、函数有别名
函数名只是函数对象的一个引用(变量),
同一个函数对象可以有多个引用指向他(非声明时的名称就是别名),
通过别名可以和原函数一样访问该函数的对象。
function getNum(){ return 100; } function b1(){ var v = getNum(); alert( v ); } function b2(){ //alert(getNum); //getNum.toString() var aa=getNum; //alert( aa ); //aa.toString()整个函数语句 alert( aa() ); //aa()和getNum()效果一样 }
三:可以用new的方式创建函数---动态函数,类似于Java中的类反射
function a(){ var add=new Function("x,y","var sum;sum=x+y;return sum");//逗号前的内容表示的是参数列表,逗号后的内容表示的是函数体。 var s=add(10,20); alert(s); }
匿名函数:在函数的内部定义函数。用a3进行调用
//匿名函数 function a3(){ var abc=function(a,b){ return a*b; }; alert(abc(2,5)); }
事件注册时函数的格式:
btnObj.onclick=function(){ 函数体..... };btnObj:是按钮的对象。