if( val > 2.3){
rs = 5.56;
}
else if( val + rs > "1.2") {
rs = document;
}
else{
rs = "Hello world";
}
IF-ELSE的用法与JAVA中的完全相同。
注意表达式中的中的“val + rs > '1.2' "这在JAVA中是不允许出现的。
另外虽然Javascript不要求在每句语句之后加分号,但加上分号是良好的编程习惯。
在样例中出现的未声明就使用的变量的情况在Javascript中是允许的,他们将自动转化为全局变量。
Javascript是大小写敏感的,所以请注意关键字的大小写。
3、SWITCH
switch(key - 65){
case 0:
ch = "A" ;
break;
case 1:
ch = "B" ;
break;
default:
ch = "X" ;
break;
case 9:
ch = "Y" ;
break;
}
SWITCH的用法与JAVA中的完全相同。
CASE后跟的变量建议使用常量表达式(整数和字符串),不要用浮点。
每个CASE结束时的BREAK语句通常不可少,除非想利用SWITCH的FALL-THROUGH来实现特定的功能。
DEFAULT语句可以放在SWITCH结构中的任意位置,可以于CASE语句交叉放置。
4、WHILE
while( i < 0 && bool_var){
if( i > -5)
continue;
i += 3 + i;
}
WHILE的用法与JAVA中的完全相同。
如果是BOOL变量可以不写bool_var == true/false,直接使用即可。
CONTINE语句会使程序流跳过循环中剩余的语句,进入循环的下一次迭代。
在Javascript中也有带LABEL的BREAK和CONTINUE,用法与JAVA相同。
在写循环时,注意不要产生“死”循环。样例程序片断中的就是一个“死”循环。
5、DO-WHILE
do{
i -= 8;
} while( i > 0);
DO-WHILE的用法与JAVA中的完全相同。
不要遗漏结尾WHILE(Expression)之后的分号。
6、FOR
for (var i = 0; i < 8; i++){
document.writeln("Hello world !");
}
DO-WHILE的用法与JAVA中的完全相同。
不要在计数变量 i 之前加 int 类型标识符,Javascript是弱类型语言,加了 int 反倒会报语法错,但是可以用 var 使之成为局部变量。
FOR(... ; ... ; ...)中分号之间的内容都可以空缺(for (;;)相当于while(true)),其中也可以使用多句语句用逗号分隔。
7、FOR-IN
for ( var ite in document) {
str_result += document [ ite ];
}
FOR-IN控制语句在JAVA中不存在,它的作用有点类似JAVA中的 Iterator 接口描述的功能。在样例中,ite将遍历 docment 中所有的可遍历元素(不是所有元素),每次迭代时,ite中会包含被遍历数组或对象的索引字符串(可以看作对象名),例如,textfield(如果你在页面中有一个元素的ID为textfield),或者像数字1、2、3(它们用来引用对象中的未命名元素)。
引用对象中元素时使用关联数组的方式:数组名或对象名 [ 索引值 ],例子中用 document [ ite ] 表示 document 中索引为 ite 的元素。
使用FOR-IN的最大好处就是你不需要知道目标对象或者数组究竟有多少元素,以及其内部结构是怎么样的,就可以遍历其所有可遍历元素。
8、CONTINUE-BREAK
again:
while ( test() ){
whie (is_run) {
if(work()) {
break again;
// continue again;
}
reap();
}
i++;
}
CONTINUE-BREAK的用法与JAVA中的完全相同。
使用带Label的break或者continue可以在内外循环中进行跳转。
9、FUNCTION
function fun_1(arg1, arg2) {
rs = arg1 + arg2;
return rs;
}
FUNCTION在Javascript中的写法与JAVA中的有很大的差异。
首先是参数类型的问题,参数前面不需要加任何类型描述,VAR也不能加。Javascript方法参数也有传值和传引用之分,规则与JAVA基本一致,具体请查阅相关资料。
其次是返回值,返回值的类型不需要标明,RETURN会返回相应的对象,若无RETURN的数据,则返回值为undefined。从这个意义上讲,FUNCTION总是有返回值的。
最后是参数个数的问题,参数列表并不限制实际传入函数的参数个数,它只是提供了一个访问参数的快捷方式,也就是说给了特定位置参数一个特定的名字。
sum = fun_1(1) ;
以上函数调用时只传给 fun_1 一个参数( fun_1 定义时需要两个参数)。那么此时 arg2 的值是什么呢?undefined,你猜对了。
我们可以把 fun_1 改成以下形式来应对这种情况。
function fun_2(arg1, arg2) {
if ( !arg1 ) arg1 = 0;
if ( !arg2 ) arg2 = 0;
rs = arg1 + arg2;
return rs;
}
undefined在布尔表达式中相当于 false 。
好了,问题似乎解决了。可是如果我们要处理更多参数怎么办呢?例如以下函数调用所代表的情况。
sum = fun_2(1, 2, 3) ;
在函数内部有一个Arguments对象,它是一个参数数组,通过它可以访问到传入函数的所有参数。
根据这一特性我们把 fun_2 改成 fun_3。
function fun_3 () {
rs = 0;
for (var i = 0 ; i < Arguments.length; i++) {
rs += parseInt( Arguments[i] );
}
return rs;
}
注意:这里使用了parseInt而不是直接加法引起的隐式转化。这是因为隐式转化的要求过高,而且有可能把 rs 转化为其他内部类型。
0 + "23a" = NaN;0 + parseInt ( "23a" )= 23
function Point ( x, y ) {
this.x = x;
this.y = y;
this.func = m_func;
}
function m_func( num ) { ... }
var newPoint = new Point( 1, 3 );
newPoint.func( newPoint.x + new Point.y);
任何一个函数都可以成为构造函数,在函数中的 this 关键字同JAVA中意义类似,但不完全相同。
通过 new 产生的对象最终会通过垃圾回收机制清除。
函数也是Javascript的内部类型之一,所以可以赋给某个变量,注意不要加 () ,()实际上也是一个操作符表示对函数的调用。
this.func = m_func; 表示把m_func函数赋给 this 的 func 成员变量。
this.func = m_func(); 表示把m_func函数调用的返回值赋给 this 的 func 成员变量。
对象成员访问与JAVA类似:对象名.成员名
为一个类添加新成员,只要给特定的成员名赋值即可(不赋值的话读出来都是 undefined),实际上全局变量或函数也就是顶级对象的成员属性和方法,从这个角度上来思考,大家就很容易理解我在VAR一节中描述的变量声明规则了。
在Javascript中函数既然被视作一个类型,那么函数的声明就会有与普通变量相似的方法:
var my_func = new Function ("arg1", "arg2", ... , "argN", " var rs = arg1 + arg2 + ... + argN; return rs; ");
var my_func = function (arg1, arg2, ... , argN)
{
var rs = arg1 + arg2 + ... + argN;
return rs;
};
前者被称之为构造器法,后者被称之为直接量法。
10、PROTOTYPE