欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

javascript的一些细节知识

程序员文章站 2022-07-15 11:30:57
...
最近这段时间大多时候都在调试页面,弄了很久也不太满意,怒了,回去专门看了几天的关于CSS的书,带着些惊恐还是决定试下,基本上搞定了,从此后对页面布局样式等不再感到那么无助与厌恶了。看来以前之所以进步不大,那是压力不够啊!
最近看了下dwr这个东西,虽然很久没更新了,现在项目中用得还是比较多,虽然本人也知道它性能不太好,但用起来确实方便,没办法。所以决定有空好好看看它的实现方式。从中也学到了不少东西。
1.一个方法实现多种参数方式的调用。
如append方法,如果只有一个调用可以这样:
function append(a) {
  return a;
}

如果有两个参数,正常情况下得再写个方法:
function append(a,b) {
  return a+b;
}

有没有可能只写一个方法就能搞定呢?虽然以前不知道,但现在知道了,那就是有!
新式写法:
function append(a/*,b*/) {
  var argcount = arguments.length;
  var lastarg = arguments[argcount - 1]; 
  var arg=0;
  if(argcount>1){
    arg=lastarg;
    return a+b;
  }
  return a;
}

上面的例子稍微再改装下,就可以适用于3个或者更多的参数了:
function append(a/*,b*/) {
  var argcount = arguments.length;
  if(argcount>1){
    var sum = a;
    for(var i=1;i<argcount;i++){
       sum = sum+arguments[i];
    }
    return sum;
  }
  return a;
}

现在就可以直接使用了:
function foo() {
 alert(append(10));
 alert(append(2,3,4,5));
}


2.javascript中的==与===的区别
http://bonsaiden.github.com/JavaScript-Garden/
上面这个链接讲得还算详细,虽然是英文的,总结下就是,==比较会先将两边的值转换成同样的类型,然后再进行比较,此举在性能上也有所影响。而===则按照严格的规则,不进行任何转换,与java的对象比较差不多,不但值要相同,引用也要一样。所以基本上都推荐用===来进行比较。

3.undefined 与null
undefined 这个东西平时虽然有见过,但基本上没用过,javascript定义了一个叫undefined 的全局变量,同时该全局变量的值也叫undefined,它既不是关键字也不是常量,所以可以手动覆盖它的值。会出现undefined的地方有以下几种情况:
  (1).访问全局变量undefined
  (2).访问一个没有return的函数
  (3).访问一个只包含return;没有给定具体值的函数
  (4).访问一个不存在的属性
  (5).访问没有传入明确的参数的函数
至于null,在javascript内部用得比较多,基本上能用null的地方都可以用undefined替代。

4.访问函数参数arguments
每个函数都可以访问变量arguments,它包含所有的函数参数值,不过arguments并不是一个数组,因此pop、push与slice等方法不能使用,不过用还是可以使用for循环的访问遍历,即:
for(var i=0;i<arguments.length;i++){
       alert(arguments[i]);
 }

5.闭包
其实闭包这种东西本人很少用过,本来写的js代码就不多,怎么能用到这些高级货呢?先给个例子:
function Counter(start) {
    var count = start;
    return {
        increment: function() {
            count++;
        },

        get: function() {
            return count;
        }
    }
}
var foo = Counter(4);
foo.increment();
foo.get(); // 5

其中上面的increment与get函数就是闭包,这个东西与java的内部类比较相似。