Javascript客户端脚本的设计和应用(2)

  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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjjfzp.html